Java 防止在Jsf2中未登录而访问受限页面
我有个问题。我想阻止用户在没有登录jsf2的情况下访问页面。当用户直接将受限页面url写入浏览器时,他/她不应该看到该页面。这就像上述情况发生时,他/她必须被重定向到登录页面。如何以编程方式执行此操作 您是否尝试过编写筛选器。。。您可以拦截所有呼叫检查用户是否有权访问某个页面如果没有,您可以将用户重定向到登录页面…,这取决于您对登录的编程方式。您似乎正在使用自制的身份验证,其中您将登录用户设置为会话范围的托管bean的属性。因为JavaEE提供了容器管理的登录,所以已经考虑了阻止访问受限页面 假设您在某个URL模式(如Java 防止在Jsf2中未登录而访问受限页面,java,jsf-2,Java,Jsf 2,我有个问题。我想阻止用户在没有登录jsf2的情况下访问页面。当用户直接将受限页面url写入浏览器时,他/她不应该看到该页面。这就像上述情况发生时,他/她必须被重定向到登录页面。如何以编程方式执行此操作 您是否尝试过编写筛选器。。。您可以拦截所有呼叫检查用户是否有权访问某个页面如果没有,您可以将用户重定向到登录页面…,这取决于您对登录的编程方式。您似乎正在使用自制的身份验证,其中您将登录用户设置为会话范围的托管bean的属性。因为JavaEE提供了容器管理的登录,所以已经考虑了阻止访问受限页面 假
/app/*
、/secured/*
等)上限制了所有页面,并且您的会话范围bean具有托管bean名称用户
,那么您可以为作业使用。在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.
}
}
在覆盖受限页面的URL模式上映射此筛选器
此外,您需要确保已禁用这些页面上的浏览器缓存,否则最终用户在注销后仍能从浏览器缓存中看到它们。您也可以为此使用过滤器。你甚至可以在同一个过滤器中完成。另见