我花了一天时间,但不明白为什么SPring Security中的remember_me
无效。我只使用xml作为配置,没有Java代码:
<http use-expressions="false" auto-config="true">
<intercept-url pattern="/css/**" filters="none" />
<intercept-url pattern="/**" access="ROLE_USER" />
<form-login login-page="/BL/index.html" default-target-url="/BL/main.html"
authentication-failure-url="/BL/index.html?autherror=true"
always-use-default-target='true' />
<logout logout-url="/logout" logout-success-url="/BL/index.html"
invalidate-session="true" />
<remember-me data-source-ref="dataSource"
user-service-ref="jdbcUserService" key="99999989"
token-validity-seconds="86400" />
<access-denied-handler error-page="/BL/index.html?autherror=true" />
</http>
简而言之index.html
是我的登录页面。当我登录时,我看到名称SPRING_SECURITY_REMEMBER_ME_COOKIE
创建的Cookie值为V2FrblE1Vlk3cFd6ZDIvZnRjdnlIZz09OndOb2h2NmUvdFlZRHJvRFRPV3lheHc9PQ
。
但如果我现在回到index.html
页面,它会要求我再次登录。我仍然看到相同的cookie值。上面的xml配置中有什么错误?我希望它不应该让我再次登录,但应该重定向到我的主页,因为我已经登录。
我在下面登录服务器上看到了。看起来请求与用户一起发送为空字符串:
14:16:34,031 DEBUG JdbcUserDetailsManager:155 - 查询返回否 用户'14:16:34,031 DEBUG DaoAuthenticationProvider:131的结果 - 用户''未找到14:16:34,031 DEBUG UsernamePasswordAuthenticationFilter:318 - 身份验证请求 失败: org.springframework.security.authentication.BadCredentialsException: 证言不正确14:16:34,032 DEBUG UsernamePasswordAuthenticationFilter:319 - 已更新 SecurityContextHolder包含null身份验证14:16:34,032 DEBUG UsernamePasswordAuthenticationFilter:320 - 委托给 验证失败 handlerorg.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler@6011c7cf 14:16:34,032 DEBUG PersistentTokenBasedRememberMeServices:214 - 交互式登录尝试失败。 14:16:34,032调试 PersistentTokenBasedRememberMeServices:300 - 取消cookie 14:16:34,032 DEBUG SimpleUrlAuthenticationFailureHandler:67 - 重定向到/BL/index.html?autherror=true
答案 0 :(得分:6)
Spring不会阻止登录用户访问登录页面。
要测试RememberMe提供程序,您至少需要两个页面(使用不同的登录名)
用户拥有此cookie后,您可以关闭浏览器,再次打开浏览器,然后直接访问受保护的页面(不应将用户重定向或转发到登录页面)
但是您的日志声明显示,您尝试通过登录页面登录用户,另一方面您告诉您要使用记住我令牌。 - 要使用“记住我”Cookie,您不能请求登录页面,而是请求一些正常页面。
RememberMeAuthenticationFilter将(在尝试登录时)在DEBUG级别打印此消息: