我們的應用程序需要用戶登錄才能查看任何內容。訪問所有頁面被LoginInterceptor
攔截,如果用戶沒有有效的會話,將彈出登錄表單。我希望攔截器在顯示登錄表單之前記住原始請求URI,並在登錄表單驗證成功時重定向到它。我試圖按照Struts 2 Redirect to correct action after authentication interceptor。Struts2從登錄攔截器重定向
@Service
@Results({
@Result(name = "redirect", type = "redirect", location = "${savedUrl}")
})
public class LoginInterceptor extends AbstractInterceptor {
//...
private String savedUrl;
//...
@Override
public final String intercept(final ActionInvocation invocation) throws Exception {
// ...
savedUrl = (String) session.getAttribute("savedUrl");
// ...
if (processLogin(request, session)) { // validate login form
if (!StringUtils.isEmpty(savedUrl)) {
return "redirect";
}
return LOGIN_SUCCESS_RESULT;
}
// if there's no loginData in sesssion, remeber the URI and display a login form
String queryString = request.getQueryString();
session.setAttribute("savedUrl", request.getRequestURI() + (queryString==null ? "" : ("?" + queryString)));
return "login";
}
// ...
public String getSavedUrl(){
return savedUrl;
}
}
不過,我得到了一個空白頁面的return "redirect"
結果。 getSavedUrl()
永遠不會被調用。
解決方案:完全,而是return "redirect";
通話response.sendRedirect(savedUrl); return null;
你的攔截器允許瀏覽未經身份驗證嗎? –
不,它不,如果你沒有登錄(沒有會話),你會被重定向到登錄表單。 –