Запретить доступ к закрытой странице без входа в Jsf2 - PullRequest
4 голосов
/ 30 июля 2011

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

Ответы [ 2 ]

12 голосов
/ 30 июля 2011

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

1 голос
/ 30 июля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...