1

在我的应用程序中,我有三种方式来登录用户表单登录、自动登录和记住我的 cookie。

我必须在用户成功认证后拦截呼叫,因为我正在使用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();

在身份验证成功完成后立即调用,但对于自动登录,永远不会调用此方法。

对于自动登录用户将收到一个 URL,单击 URL 将对用户进行身份验证,我正在以编程方式进行。在 URL 中,我输入了加密的用户名(无密码)。当用户单击 URL(自动登录)时,我正在使用以下代码行对用户进行身份验证

Authentication authentication = new UsernamePasswordAuthenticationToken(userName, null, userDetails.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);

但,

AuthenticationSuccessHandler.onAuthenticationSuccess()

在这种情况下永远不会调用。

有没有其他方法可以拦截成功身份验证的调用。

4

1 回答 1

1

您可以为这两种情况重用现有的身份验证成功处理程序。记住我 - 只需配置它:

<remember-me authentication-success-handler-ref="authenticationSuccessHandlerImpl"/>

自动登录 - 注入相同的身份验证成功处理程序 bean 并在您的代码之后手动调用它:

Authentication authentication = new UsernamePasswordAuthenticationToken(userName, null, userDetails.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);
successHandler.onAuthenticationSuccess(request, response, authentication);
于 2013-08-29T09:43:55.367 回答