Spring Security 3.0重定向到超时的页面

blo*_*824 3 java security redirect spring

我正在使用Spring Security 3.0.6,我希望能够执行以下操作:

如果用户在页面上并且发生会话超时,则用户将进入登录页面并在有效登录时重定向回到发生超时的页面.

我目前在security.xml文件中有以下内容.

<http auto-config="true" use-expressions="true">
    <form-login
        login-page="/login" 
        default-target-url="/main" 
        always-use-default-target="false"
        authentication-failure-url="/login.html?error=true"
        authentication-success-handler-ref="authenticationSuccessHandler" />
    <remember-me/>
    <logout logout-success-url="/login" />
</http>
Run Code Online (Sandbox Code Playgroud)

这是我的身份验证类:

public class AuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {

public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException {

    String url = "";

    HttpSession session = request.getSession(false);
    if (session != null) {
        SavedRequest savedRequest = (SavedRequest) session.getAttribute(WebAttributes.SAVED_REQUEST);
        if (savedRequest != null) {
            url = savedRequest.getRedirectUrl();
        }
    }

    System.out.println("url: "+ url);

    if (url == "") {
        response.sendRedirect(request.getContextPath()+"/main");
    } else {
        response.sendRedirect(url);
    }
}
Run Code Online (Sandbox Code Playgroud)

}

我通过javascript将用户发送回登录页面:

window.location.href="/login";
Run Code Online (Sandbox Code Playgroud)

我的身份验证类中的url始终为null.我怎样才能使这个工作让Spring重定向到正确的页面?

jdd*_*lla 5

您不需要编写任何自定义代码,因为Spring Security可以默认执行此操作.请查看有关authentication-success-handler-ref 此处的文档.

认证成功处理程序-REF

这可以用作default-target-url和always-use-default-target的替代方法,使您可以在成功进行身份验证后完全控制导航流.该值应该是应用程序上下文中AuthenticationSuccessHandler bean的名称.默认情况下,的实现SavedRequestAwareAuthenticationSuccessHandler使用,并与默认目标URL注入.

引用AuthenticationSuccessHandler bean,该bean应该用于处理成功的身份验证请求.不应与default-target-url(或always-use-default-target)结合使用,因为实现应始终处理导航到后续目标.