在我的应用程序中,我有三种方式登录用户 表格登录, 自动登录和 记住我的饼干。
我必须在成功验证用户后拦截呼叫,因为我使用 AuthenticationSuccessHandler 来拦截呼叫。
我正在使用spring security来验证用户身份。对于基于表单的登录,我在spring-security.xml
中配置了以下代码form-login login-page="/login/formlogin" default-target-url="/login/user_login"
authentication-failure-url="/login/loginfailed"
authentication-success-handler-ref="authenticationSuccessHandlerImpl"/>
和
AuthenticationSuccessHandler.onAuthenticationSuccess();
验证成功完成后立即调用,但是 对于自动登录,永远不会调用此方法。
对于autologin用户将邮寄一个URL,点击该URL将验证用户,我正在以编程方式进行。在URL中,我将加密用户名(无密码)。 我在点击URL(自动登录)时使用以下代码行来验证用户
Authentication authentication = new UsernamePasswordAuthenticationToken(userName, null, userDetails.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);
但是,
AuthenticationSuccessHandler.onAuthenticationSuccess()
在这种情况下,永远不会被调用。
是否有其他方法可以拦截成功身份验证时的呼叫。
答案 0 :(得分:1)
您可以在两种情况下重复使用现有的auth成功处理程序。记住我 - 只需配置它:
<remember-me authentication-success-handler-ref="authenticationSuccessHandlerImpl"/>
自动登录 - 注入相同的auth成功处理程序bean并在手动代码后调用它:
Authentication authentication = new UsernamePasswordAuthenticationToken(userName, null, userDetails.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);
successHandler.onAuthenticationSuccess(request, response, authentication);