使用JSF 2.0实现重定向登录的正确方法是什么?

kon*_*ski 5 servlets jsf-2 servlet-filters

我的部分网站只能由授权用户访问.假设用户输入属于仅授权部分的页面a.html.

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

在JSF 2.0中实现此类场景的正确方法是什么?

Bal*_*usC 4

只需以同样的方式执行即可,使用Filter. 很高兴知道 JSF 会话范围的托管 Bean 在幕后存储为属性,HttpSession并以托管 Bean 名称作为键。

假设您有一个像这样的托管 bean:

@ManagedBean
@SessionScoped 
public class UserManager {

    private User user;

    // ...

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

}
Run Code Online (Sandbox Code Playgroud)

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");
}
Run Code Online (Sandbox Code Playgroud)