我的部分网站只能由授权用户访问。 假设用户输入属于仅授权部分的页面a.html。
如果我要使用servlets / JSP,我可以编写一个过滤器来检查用户是否已登录,如果没有,则将其重定向到登录页面。 成功登录后,用户将被重定向到他最初想要访问的页面,在本例中为a.html。 (页面地址可以存储在请求中)。
在JSF 2.0中实现此类场景的正确方法是什么?
用过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");
}