Redirecionamento Struts2 do interceptor de login
Nosso aplicativo requer que os usuários estejam logados para visualizar qualquer conteúdo. O acesso a todas as páginas é interceptado porLoginInterceptor
que abre o formulário de login, se não houver sessão válida para o usuário. Gostaria que o interceptador se lembrasse do URI da solicitação original antes de exibir o formulário de login e redirecione-o se a validação do formulário de login for bem-sucedida. Eu tentei seguirRedirecionamento do Struts 2 para corrigir a ação após o interceptador de autenticação.
@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;
}
}
No entanto, recebo uma página em branco como resultado dereturn "redirect"
. getSavedUrl()
nunca é chamado.
Solução: risque a anotação @Results completamente e em vez dereturn "redirect";
ligarresponse.sendRedirect(savedUrl); return null;