我有个问题.我想阻止用户在没有登录jsf2的情况下访问页面.当用户直接将受限制的页面URL写入浏览器时,他/她不应该看到该页面.就像上面的情况一样,他/她必须被重定向到登录页面.我该如何以编程方式执行此操作?
Bal*_*usC 12
这取决于您如何编程登录.您似乎正在使用自行开发的身份验证,其中您将登录用户设置为会话范围的托管bean的属性.因为Java EE提供了容器管理登录,所以已经考虑了阻止访问受限页面.
假设您在某个URL模式上有所有受限制的页面,例如/app/*,/secured/*并且您的会话范围bean具有托管bean名称user,那么您可以使用过滤器来完成该作业.在doFilter()方法中实现以下内容:
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession(false);
User user = (session != null) ? (User) session.getAttribute("user") : null;
if (user == null || !user.isLoggedIn()) {
response.sendRedirect("/login.xhtml"); // No logged-in user found, so redirect to login page.
} else {
chain.doFilter(req, res); // Logged-in user found, so just continue request.
}
}
Run Code Online (Sandbox Code Playgroud)
将此过滤器映射到覆盖受限页面的URL模式.
此外,您需要确保已禁用这些页面上的浏览器缓存,否则最终用户仍可以在注销后从浏览器缓存中看到它们.您也可以使用过滤器.你甚至可以在同一个过滤器中完成它.另请参见浏览器后退按钮不会清除旧的支持bean值.
| 归档时间: |
|
| 查看次数: |
5219 次 |
| 最近记录: |