Прежде чем я войду в систему, я могу нажать что-нибудь за пределами моего каталога ограничений безопасности. Если я попытаюсь перейти в каталог ограничений безопасности, он перенаправит меня на страницу входа в форму. Как и следовало ожидать.
После входа в систему я могу заниматься своими делами и использовать ресурсы как снаружи, так и внутри моего ограничения безопасности.
Но когда срок действия токена LTPA истекает (все еще есть активная сессия) и я пытаюсь перейти на неограниченную страницу, например, меня перенаправляют на страницу входа, я получаю сообщение об ошибке в заголовке.
Итак, я хотел бы выяснить несколько вещей: 1. Могу ли я сделать так, чтобы токен LTPA не истекал, как моя сессия? 2. Могу ли я истечь свою сессию, когда истечет токен LTPA? 3. Почему я не могу анонимно зайти на неограниченную страницу? Он четко распознает, что срок действия моего токена LTPA истек, и пытается перенаправить меня для входа в систему. В какой момент это терпит неудачу.
ОК, значит попал куда-то с фильтром. Фильтр перенаправляет пользователя, не вошедшего в систему, на страницу входа. Но проблема снова в том, что как только срок действия токена ltpa истекает, эта строка перестает работать ((HttpServletRequest) request).getSession(false)
, вызывая исключение в заголовке, UnauthorizedSessionRequestException
. Итак, как вы можете видеть, я попытался поймать эту ошибку и выйти из системы. Который, упс, бросает еще UnauthorizedSessionRequestException
. Так как же мне не использовать сеанс?
@Override
public void doFilter(final ServletRequest request, final ServletResponse response,
final FilterChain chain) throws IOException, ServletException
{
final String sourceMethod = "doFilter";
if (logger.isLoggable(Level.FINER)) {
logger.entering(sourceClass, sourceMethod, new Object[] { request, response, chain });
}
try {
final HttpSession session = ((HttpServletRequest) request).getSession(false);
final UserBean user = (session != null) ? (UserBean) session.getAttribute("userBean")
: null;
if (user == null || (user != null && !user.isLoggedOn())) {
final HttpServletResponse res = (HttpServletResponse) response;
res.sendRedirect("../login.jsf");
}
} catch (final UnauthorizedSessionRequestException exc) {
((HttpServletRequest) request).logout();
final HttpServletResponse res = (HttpServletResponse) response;
res.sendRedirect("../login.jsf");
} catch (final Exception exc) {
final ServletException exception = new ServletException(
"[UserBeanFilter] Exception doFilter.", exc);
logger.throwing(sourceClass, sourceMethod, exception);
throw exception;
}
chain.doFilter(request, response);
logger.exiting(sourceClass, sourceMethod);
}
javax.faces.*
. Итак, проблема не в JSF. - person BalusC   schedule 22.10.2015