Запретить доступ к закрытой странице без входа в Jsf2

У меня проблема. Я хочу запретить пользователю доступ к странице без входа в систему в jsf2. Когда пользователь напрямую пишет ограниченный URL страницы в браузер, он / она не должен видеть страницу. Вот как вышеперечисленные обстоятельства, он / она должен быть перенаправлен на страницу входа. Как я могу сделать это программно?

2 ответа

Решение

Это зависит от того, как вы запрограммировали логин. Кажется, вы используете доморощенную аутентификацию, при которой зарегистрированный пользователь задается в качестве свойства управляемого компонента в сеансе. Поскольку в 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-компонента.

Вы пытались написать фильтр... вы можете перехватить все вызовы, проверить, есть ли у пользователя доступ к странице, если нет, вы можете перенаправить пользователя на страницу входа...

Другие вопросы по тегам