Spring Security并发控制

我使用了spring security 3.0.7,我在我的项目中实现了并发控制。 但它没有用。 我用过

   

即使我尝试过弹簧安全参考的解决方案,但它没有成功。 这是我的配置文件内容:

                 

我得到以下exception:

 org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Filter beans '' and '' 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  and avoiding the use of . 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) 

有人可以帮忙解决这个问题吗?

如果使用concurrency-control名称空间元素, ConcurrentSessionFilter将自动添加到filter链中 ,因此您无法使用custom-filter在同一位置添加一个或者您将收到此错误。

如果您使用form-login (或auto-config )并尝试使用custom-filter添加UsernamePasswordAuthenticationFilter则会出现同样的问题。 它看起来像是导致你在这里遇到的具体问题(使用你的bean myAuthFilter )。

您应该将其余的http元素配置添加到问题中,以使冲突的来源更加明显。

文件说:

添加对并发会话控制的支持,允许限制用户可以拥有的活动会话数。 将创建ConcurrentSessionFilter ,并将ConcurrentSessionControlStrategySessionManagementFilter一起使用。 如果声明了form-login元素,则策略对象也将注入到创建的身份validationfilter中。 将SessionRegistrySessionRegistryImpl实例,除非用户希望使用自定义bean)的实例以供策略使用。

因此,您无法在此处使用自定义filter标记。 这就是为什么它可能会给出错误。 我从这个URL获取了上述内容。 看一下这个:

参考: http : //static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#nsa-concurrency-control

将以下内容添加到web.xml:

    org.springframework.security.web.session.HttpSessionEventPublisher   

如果您已经编写了UserPrincipalUserPrincipalImpl (您自己的实现),则应该重写Object的equals()hashCode()方法。

我有以下applicationContext-security.xml,它完美无缺

                    

要正确测试,您应该执行以下操作:在两个不同的浏览器中打开网站并清除cookie。 第一次你可以第二次登录而不是。 在两种情况下,您都应该看到浏览器正在显示HTTP身份validation表单。 如果你没有看到它意味着你已经在之前的会话中进行了身份validation,那么你需要删除你的cookie。 (为了安全起见,您应该使用两种不同的浏览器进行测试,否则将共享cookie)