Struts2 перенаправить с логина-перехватчика
Наше приложение требует, чтобы пользователи вошли в систему для просмотра любого контента. Доступ ко всем страницам перехваченLoginInterceptor
который вызывает форму входа, если для пользователя нет действительного сеанса. Я бы хотел, чтобы перехватчик запомнил исходный URI запроса перед отображением формы входа в систему и перенаправил на нее, если проверка формы входа прошла успешно. Я пытался следоватьStruts 2 Перенаправить на правильное действие после аутентификации перехватчик.
@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()
никогда не называется.
Решение: поцарапайте аннотацию @Results полностью и вместоreturn "redirect";
вызовresponse.sendRedirect(savedUrl); return null;