Это зависит от того, как вы запрограммировали логин. Кажется, вы используете доморощенную аутентификацию, при которой зарегистрированный пользователь задается в качестве свойства управляемого компонента в сеансе. Поскольку в Java EE предусмотрен вход с управлением контейнером, предотвращение доступа к запрещенным страницам уже учтено.
Предполагая, что у вас есть все запрещенные страницы в определенном шаблоне URL, например /app/*
, /secured/*
и т. Д., И что у вашего bean-объекта области действия есть имя управляемого бина user
, тогда вы можете использовать фильтр за работу. Реализуйте в методе doFilter()
следующее:
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession(false);
User user = (session != null) ? (User) session.getAttribute("user") : null;
if (user == null || !user.isLoggedIn()) {
response.sendRedirect("/login.xhtml"); // No logged-in user found, so redirect to login page.
} else {
chain.doFilter(req, res); // Logged-in user found, so just continue request.
}
}
Сопоставьте этот фильтр с шаблоном URL, охватывающим ограниченные страницы.
Кроме того, вам необходимо убедиться, что вы отключили кеш браузера на этих страницах, иначе конечный пользователь все равно сможет видеть их из кэша браузера после выхода из системы. Вы также можете использовать фильтр для этого. Вы даже можете сделать это в том же фильтре. См. Также Кнопка возврата в браузере не удаляет старые значения bean-компонента .