Servlets 使用JSF2.0实现重定向登录的正确方法是什么?

Servlets 使用JSF2.0实现重定向登录的正确方法是什么?,servlets,jsf-2,servlet-filters,Servlets,Jsf 2,Servlet Filters,我的网站的一部分应该只有授权用户才能访问。让我们假设用户将进入页面a.html,该页面属于仅授权的部分 若我使用servlet/JSP,我可以编写一个过滤器来检查用户是否登录,若并没有,则将其重定向到登录页面。成功登录后,用户将被重定向到最初想要访问的页面,在本例中是a.html。(页面地址可以存储在请求中) 在JSF2.0中实现这种场景的正确方法是什么?只需使用过滤器以同样的方式实现即可。很高兴知道JSF会话范围的托管bean被存储为HttpSession属性,托管bean名称作为键 假设您有

我的网站的一部分应该只有授权用户才能访问。让我们假设用户将进入页面a.html,该页面属于仅授权的部分

若我使用servlet/JSP,我可以编写一个过滤器来检查用户是否登录,若并没有,则将其重定向到登录页面。成功登录后,用户将被重定向到最初想要访问的页面,在本例中是a.html。(页面地址可以存储在请求中)


在JSF2.0中实现这种场景的正确方法是什么?

只需使用
过滤器以同样的方式实现即可。很高兴知道JSF会话范围的托管bean被存储为
HttpSession
属性,托管bean名称作为键

假设您有这样一个托管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");
}

但是,我应该如何实现这一点:“成功登录后,用户将被重定向到他最初想要访问的页面,在本例中为a.html。”?对不起,我知道您已经计算出了这一部分。您可以使用
ExternalContext#redirect()
在JSF中发送重定向。@Koray:它继续请求处理。