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

Posted

技术标签:

【中文标题】使用 JSF 2.0 实现重定向登录的正确方法是啥?【英文标题】:What is the correct way to implement login with redirect using JSF 2.0?使用 JSF 2.0 实现重定向登录的正确方法是什么? 【发布时间】:2011-07-28 10:21:06 【问题描述】:

我的部分网站应该仅供授权用户访问。假设用户将输入属于仅授权部分的页面 a.html

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

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

【问题讨论】:

【参考方案1】:

只需使用 Filter 以相同的方式进行操作。很高兴知道 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:它继续请求处理。

以上是关于使用 JSF 2.0 实现重定向登录的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

处理 AJAXified 组件的 JSF 2.0 异常的正确方法是啥?

在 WEB 应用程序中重定向到不同 URL 的正确方法是啥?

将 PrimeFaces 与 JSF 一起使用时 Shiro 重定向到错误的位置

具有 Spring 安全性的 JSF - 登录后重定向到指定页面

登录后重定向错误(Java EE w/JSF)

如何使用 PrimeFaces 在 JSF 上重定向?