【问题标题】:Spring Security Custom Session management and Remember me not workingSpring Security 自定义会话管理并记住我不工作
【发布时间】: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


【解决方案1】:

我也遇到了同样的问题,我想使用会话并发控制以及记住我。我的配置略有不同,如果超过 max-session,我不会向用户抛出错误,而是我只是使旧会话过期,以便用户可以继续使用新会话。使用弹簧提供的豆子,它不会按预期工作。当我第二次登录时,并发控制启动并过期旧会话,然后用户继续使用新创建的会话。但是当用户尝试使用第一个会话访问系统时,ConcurrentSessionFilter 检测到此会话已过期并重定向到配置的 expired-url,这是正常的和预期的。

但我的要求不同,如果用户尝试使用第一个会话,则第二个会话应该过期并且应该重新验证用户,然后应该创建一个新会话以供用户继续。基本上,用户可以在不同的浏览器之间切换,而无需使用选中的 remember-me 选项实际输入用户名/密码,但服务器中只有一个活动会话。当用户在不同浏览器之间切换时,会话将过期/创建。

我设法通过扩展和自定义 spring bean 来实现这一点。如果您的要求相似,我可以帮助您完成我的配置。

【讨论】:

  • 能否请您帮我配置一下,我在grails应用程序中有类似的要求。您是如何做到这一点的?
猜你喜欢
  • 1970-01-01
  • 2012-01-14
  • 2013-03-29
  • 2017-02-25
  • 2012-05-25
  • 2011-03-09
  • 2015-05-10
  • 1970-01-01
  • 2018-09-23
相关资源
最近更新 更多