我正在使用 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>
这是我的身份验证类:
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);
}
}
}
我通过 javascript 将用户发送回登录页面,例如:
window.location.href="/login";
我的身份验证类中的 url 始终为空。我怎样才能使这项工作,以便 Spring 将重定向到正确的页面?