Как правильно реализовать вход с помощью перенаправления с помощью JSF 2.0? - PullRequest
5 голосов
/ 03 апреля 2011

Часть моего сайта должна быть доступна только авторизованным пользователям. Давайте предположим, что пользователь войдет в страницу a.html, которая принадлежит только авторизованной части.

Если бы я использовал сервлеты / JSP, я мог бы написать фильтр, который проверял бы, вошел ли пользователь в систему и, если нет, перенаправил его на страницу входа. После успешного входа в систему пользователь будет перенаправлен на страницу, на которую он первоначально хотел попасть, в данном случае a.html. (Адрес страницы может быть сохранен в запросе).

Как правильно реализовать такой сценарий в JSF 2.0?

1 Ответ

3 голосов
/ 03 апреля 2011

Просто сделайте это так же, с Filter. Полезно знать, что управляемые bean-объекты области JSF находятся под прикрытием, хранящимся как атрибут HttpSession с именем управляемого bean-компонента в качестве ключа.

Предполагая, что у вас есть управляемый компонент, такой:

@ManagedBean
@SessionScoped 
public class UserManager {

    private User user;

    // ...

    public boolean isLoggedIn() {
        return (user != null);
    }

}

Затем вы можете проверить это в Filter#doFilter() следующим образом:

UserManager userManager = (UserManager) ((HttpServletRequest) request).getSession().getAttribute("userManager");

if (userManager != null && userManager.isLoggedIn()) {
    chain.doFilter(request, response);
} else {
    ((HttpServletResponse) response).sendRedirect("login.xhtml");
}
...