使用 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 重定向到错误的位置