这是一个奇怪的问题,但我可以100%重现它。
根据login automatically with Grails Spring Security,以编程方式登录用户的推荐方法是使用springSecurityService.reauthenticate(username),这在注册确认后用于Spring-Security-UI插件。
但我的应用程序有这种非常奇怪的行为,它似乎没有立即生效(我尝试重新定向到经过身份验证的页面),但前提是我的域上没有从该浏览器进行过任何登录尝试。注意我在我的代码和spring-security-ui'verify registration'中都看到了这种行为,它使用这种方法来记录用户。
澄清,如果我:
注意在步骤2中按下控制器,或者任何其他控制器实际上确实立即给我一个JSESSIONID,其值不同于URL上的值。
但是如果我:
我很困惑。不知怎的,我得到了冲突的JSESSIONID值。在调用springSecurityService.reauthenticate(用户名)之后但在调用redirect(... securepage ...)之前,是否需要执行其他操作。注意我确实使用了频道安全性,它在整个重定向中在http和https之间反弹 - 但我不确定这与只有先前有一次身份验证尝试的奇怪行为有关。
注意 使用用户名和密码通过登录屏幕进行正常登录,第一次使用干净的Cookie。
答案 0 :(得分:1)
对于遇到此问题的任何人来说,问题与此问题Tomcat, keep session when moving from HTTPS to HTTP直接相关,而不是与springSecurityService.reauthenticate有关。我的登录页面是https,这导致了一个'安全'的JSESSIONID cookie,但在重新认证之后,我引导用户访问的安全页面是http,并且会话不再存在。通过强制https通过渠道安全性解决所有用户“登录”的目标网页。