登录失败后如何记住我的价值并重新打开登录页面? 我可以在控制器上获得_spring_security_remember_me的值吗?
我只需要在登录错误发生时保留复选框的值!
答案 0 :(得分:0)
你的问题有点不清楚,或者你有一个错误的形象,如何记住我的春季安全工作。阅读Spring安全性参考第11章“记住我的身份验证”
简单地说就是这样:
如果用户使用其用户名和密码成功登录并启用了“记住我”复选框,则Spring Security将创建一个用于验证用户并将其“发送”给用户的cookie
未登录用户请求安全页面(需要验证)spring将检查他是否为有效cookie。
我希望这会对你有所帮助。
答案 1 :(得分:0)
您可以尝试以下解决方案: 1.将自定义过滤器插入弹簧安全过滤器链 2.在此过滤器内部获取http会话并存储请求参数的值
当我们更改登录表单(添加另一个参数)时,我们需要自定义登录表单的弹簧表示和spring登录处理过滤器。 这是配置:
<authentication-manager alias="authenticationManager"/>
<beans:bean id="myFilter" class="test.MyAuthenticationProcessingFilter">
<custom-filter position="AUTHENTICATION_PROCESSING_FILTER" />
<beans:property name="defaultTargetUrl" value="/initialize.action"/>
<beans:property name="authenticationFailureUrl" value="/login_failed.action"/>
<beans:property name="authenticationManager" ref="authenticationManager"/>
<beans:property name="alwaysUseDefaultTargetUrl" value="true"/>
<beans:property name="filterProcessesUrl" value="/perform_login"/>
</beans:bean>
<beans:bean id="entryPoint" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint">
<beans:property name="loginFormUrl" value="/login.action"/>
</beans:bean>
MyAuthenticationProcessingFilter扩展了spring的org.springframework.security.ui.webapp.AuthenticationProcessingFilter,包装了tryAuthentication方法获取请求参数并将其存储在http会话中。编写此类只是为了显示该想法,为了更好地练习浏览AuthenticationProcessingFilter代码以获取用户名和密码参数。
public class MyAuthenticationProcessingFilter扩展AuthenticationProcessingFilter {
@Override
public Authentication attemptAuthentication(HttpServletRequest request)
throws AuthenticationException {
String param = request.getParameter("_spring_security_remember_me");
HttpSession session = request.getSession();
if (session != null || getAllowSessionCreation()) {
session.setAttribute("_spring_security_remember_me", param);
}
return super.attemptAuthentication(request);
}
}
您可能会注意到“myFilter”和“entryPoint”bean一起定义了由内部元素定义的参数。您希望使用默认行为时使用。但在我们的例子中,我们使用自定义bean,因此您应该完全删除元素。 现在我们需要告诉我们使用我们的bean。 “myFilter”bean通过使用bean定义中的元素传递给spring链:
<beans:bean id="myFilter" class="test.MyAuthenticationProcessingFilter">
<custom-filter position="AUTHENTICATION_PROCESSING_FILTER" />
...
</beans:bean>
“entryPoint”传递给使用属性:
<http entry-point-ref="entryPoint">
...
<!-- no form-login here -->
</http>