【发布时间】:2014-06-23 22:04:43
【问题描述】:
我已经配置了自定义会话管理,例如:
<sec:session-management session-fixation-protection="none">
<sec:concurrency-control max-sessions="1" error-if-maximum-exceeded="true" />
</sec:session-management>
记得我喜欢:
<sec:remember-me />
<sec:custom-filter ref="rememberMeFilter" after="REMEMBER_ME_FILTER"/>
<bean id="rememberMeFilter" class="org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter">
<property name="rememberMeServices" ref="rememberMeServices"/>
<property name="authenticationManager" ref="theAuthenticationManager" />
</bean>
<bean id="rememberMeServices" class="org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices">
<property name="userDetailsService" ref="myUserDetailsService"/>
<property name="key" value="springRocks"/>
</bean>
<bean id="rememberMeAuthenticationProvider" class="org.springframework.security.authentication.rememberme.RememberMeAuthenticationProvider">
<property name="key" value="springRocks"/>
</bean>
当我使用记住我登录时,检查并关闭浏览器并再次打开新浏览器并记住我没有工作,而不是我收到会话超出错误。因为我设置了 max-sessions=1。
谁能帮帮我。
提前致谢。
【问题讨论】:
-
它按预期工作。您正在关闭浏览器,因此旧会话仍然存在。您再次打开浏览器,由于记住我,您已自动登录,但由于旧会话仍然存在,因此无法进行此操作。
-
@M.Deinum,你是对的。但我想像“Gmail”一样实现它,你用“记住我”选项登录到你的 gmail 并关闭你的浏览器并再次打开它,然后它会自动登录到你的帐户。
-
将记住我与并发会话结合起来是行不通的。除非您修改记住我以首先清理会话,否则基本上会使并发会话控制无用。
-
@M.Deinum,那么解决方案是什么?因为我想同时实现。你有什么别的想法吗?谢谢。
-
为什么需要并发会话控制?在这种情况下不要抛出异常,这将使已经存在的会话无效并开始一个新的会话。但不确定你想要什么。出于某种原因,感觉就像你想要一些相互排斥的东西。
标签: spring-security remember-me session-management