我使用了spring security 3.0.7,并且在我的项目中实现了并发控制。但它不起作用。我用过
<security:session-management>
<security:concurrency-control error-if-maximum-exceeded="true" max-sessions="1"/>
</security:session-management>甚至我也尝试过spring security reference的解决方案,但没有起作用。以下是我的配置文件内容:
<session-management session-authentication-strategy-ref="sas"/>
</http>
<beans:bean id="concurrencyFilter"
class="org.springframework.security.web.session.ConcurrentSessionFilter">
<beans:property name="sessionRegistry" ref="sessionRegistry" />
<beans:property name="expiredUrl" value="/session-expired.htm" />
</beans:bean>
<beans:bean id="myAuthFilter" class=
"org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter">
<beans:property name="sessionAuthenticationStrategy" ref="sas" />
<beans:property name="authenticationManager" ref="authenticationManager" />
</beans:bean>
<beans:bean id="sas" class=
"org.springframework.security.web.authentication.session.ConcurrentSessionControlStrategy">
<beans:constructor-arg name="sessionRegistry" ref="sessionRegistry" />
<beans:property name="maximumSessions" value="1" />
</beans:bean>
<beans:bean id="sessionRegistry"
class="org.springframework.security.core.session.SessionRegistryImpl" />我得到了以下异常:
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Filter beans '<myAuthFilter>' and '<org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#0>' have the same 'order' value. When using custom filters, please make sure the positions do not conflict with default filters. Alternatively you can disable the default filters by removing the corresponding child elements from <http> and avoiding the use of <http auto-config='true'>.
Offending resource: class path resource [config/auth.xml]
at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:72)
at org.springframework.security.config.http.HttpSecurityBeanDefinitionParser.checkFilterChainOrder(HttpSecurityBeanDefinitionParser.java:196)
at org.springframework.security.config.http.HttpSecurityBeanDefinitionParser.parse(HttpSecurityBeanDefinitionParser.java:132)
at org.springframework.security.config.SecurityNamespaceHandler.parse(SecurityNamespaceHandler.java:86)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1338)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1328)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:135)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:93)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)有人能帮我回答这个问题吗?
发布于 2012-01-01 17:56:01
如果您已经编写了UserPrincipal和UserPrincipalImpl(您自己的实现),则应该覆盖Object的equals()和hashCode()方法。
发布于 2011-12-27 20:23:21
如果您使用concurrency-control名称空间元素,则会自动生成一个ConcurrentSessionFilter will be added to the filter chain,因此不能使用custom-filter在同一位置添加一个,否则将出现此错误。
如果您使用form-login (或auto-config)并尝试使用custom-filter添加UsernamePasswordAuthenticationFilter,也会出现同样的问题。看起来这导致了您在这里遇到的特定问题(您的bean myAuthFilter)。
您可能应该将http元素配置的其余部分添加到问题中,以使冲突的来源更加明显。
发布于 2011-12-28 20:30:56
文档中写道:
增加了对并发会话控制的支持,允许对用户可以拥有的活动会话数量进行限制。将创建一个
ConcurrentSessionFilter,并将ConcurrentSessionControlStrategy与该SessionManagementFilter一起使用。如果已经声明了一个form-login元素,那么策略对象也将被注入到创建的身份验证过滤器中。将创建一个SessionRegistry实例(一个SessionRegistryImpl实例,除非用户希望使用自定义bean),以供策略使用。
所以你不能在这里使用自定义过滤器标签。这就是为什么它可能会给出错误。我从这个网址获取了上面的内容。看看这个:
参考:http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#nsa-concurrency-control
https://stackoverflow.com/questions/8586824
复制相似问题