您的配置中有2个错误:一个关于
<http>元素,一个关于
ConcurrentSessionFilter。
- 班级
ConcurrentSessionFilter
从春季3改为春季4。在Spring 3中删除了不带参数的构造函数,该构造函数在Spring 3中已弃用。
这解释了您得到的错误:
造成原因:
java.lang.NoSuchMethodException:org.springframework.security.web.session.ConcurrentSessionFilter.<init>()
这意味着您引用了no-arg构造函数,
<init>但它不存在。
您需要更改配置以使用two-args构造函数:
<beans:bean id="concurrencyFilter"> <beans:constructor-arg ref="sessionRegistry" /> <beans:constructor-arg value="/session-expired.htm" /></beans:bean>
- 关于
<http>
元素,您已指定use-expressions="true"
但未使用Spring EL表达式。引用Spring文档:
要使用表达式保护单个网址,您首先需要
use-expressions将<http>元素中的属性设置为true。然后,Spring
Security将期望元素的access属性<intercept-url>包含Spring EL表达式。
因此,你要么需要设置
use-expressions,以
false显式地(默认值为
true)或改变
access属性
access="hasRole('...')。


