首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring安全并发控制

Spring安全并发控制
EN

Stack Overflow用户
提问于 2011-12-21 16:22:36
回答 5查看 18K关注 0票数 8

我使用了spring security 3.0.7,并且在我的项目中实现了并发控制。但它不起作用。我用过

代码语言:javascript
运行
复制
<security:session-management>
            <security:concurrency-control error-if-maximum-exceeded="true" max-sessions="1"/>
</security:session-management>

甚至我也尝试过spring security reference的解决方案,但没有起作用。以下是我的配置文件内容:

代码语言:javascript
运行
复制
  <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" />

我得到了以下异常:

代码语言:javascript
运行
复制
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)

有人能帮我回答这个问题吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-01-01 17:56:01

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

票数 2
EN

Stack Overflow用户

发布于 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元素配置的其余部分添加到问题中,以使冲突的来源更加明显。

票数 4
EN

Stack Overflow用户

发布于 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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8586824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档