Я пытаюсь реализовать функцию запомнить меня в своем приложении java ee 6, но у меня есть проблемы в сочетании со встроенной функцией безопасности. У меня есть следующая конфигурация в моем web.xml:
<login-config>
<auth-method>FORM</auth-method>
<realm-name>my-realm</realm-name>
<form-login-config>
<form-login-page>/login.jsf</form-login-page>
<form-error-page>/login.jsf</form-error-page>
</form-login-config>
</login-config>
То, что я пытаюсь создать, - это фильтр, который автоматически регистрирует человека в его сеансе, истек, если у него есть cookie, содержащий некоторые данные. Это работает, но когда вызывается фильтр, перенаправление на login.jsf уже вступило в силу, прежде чем я могу что-то изменить. Я предположил, что фильтры вызываются до собственной системы безопасности java ee, поскольку они на самом деле вызываются на защищенных страницах, но, похоже, это не так. Есть ли какой-нибудь способ, позволяющий пользователю перейти на ту же страницу, которую он запрашивал, вместо того, чтобы быть перенаправленным на login.jsf?
Фильтр:
@WebFilter(
filterName="authFilter",
servletNames={
"Faces Servlet"
}
)
public class AuthFilter implements Filter {
public AuthFilter() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
User user = (User)req.getSession().getAttribute("user");
if(user == null){
String uuid = CookieUtil.getCookieValue(req, "rememberme");
if(uuid != null){
UserBean userBean = EJBUtil.lookup(UserBean.class);
RememberMe rememberme = userBean.findRememberMe(uuid);
if(rememberme != null){
user = rememberme.getUser();
try{
req.login(user.getEmail(), user.getPasswordDigest());
req.getSession().setAttribute("user", user);
CookieUtil.addCookie(res, "rememberme", uuid, CookieUtil.AGE_ONE_YEAR);
}catch(ServletException e){}
}
else{
CookieUtil.removeCookie(res, "rememberme");
}
}
}
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
}