Java 防止在Jsf2中未登录而访问受限页面

Java 防止在Jsf2中未登录而访问受限页面,java,jsf-2,Java,Jsf 2,我有个问题。我想阻止用户在没有登录jsf2的情况下访问页面。当用户直接将受限页面url写入浏览器时,他/她不应该看到该页面。这就像上述情况发生时,他/她必须被重定向到登录页面。如何以编程方式执行此操作 您是否尝试过编写筛选器。。。您可以拦截所有呼叫检查用户是否有权访问某个页面如果没有,您可以将用户重定向到登录页面…,这取决于您对登录的编程方式。您似乎正在使用自制的身份验证,其中您将登录用户设置为会话范围的托管bean的属性。因为JavaEE提供了容器管理的登录,所以已经考虑了阻止访问受限页面 假

我有个问题。我想阻止用户在没有登录jsf2的情况下访问页面。当用户直接将受限页面url写入浏览器时,他/她不应该看到该页面。这就像上述情况发生时,他/她必须被重定向到登录页面。如何以编程方式执行此操作

您是否尝试过编写筛选器。。。您可以拦截所有呼叫检查用户是否有权访问某个页面如果没有,您可以将用户重定向到登录页面…

,这取决于您对登录的编程方式。您似乎正在使用自制的身份验证,其中您将登录用户设置为会话范围的托管bean的属性。因为JavaEE提供了容器管理的登录,所以已经考虑了阻止访问受限页面

假设您在某个URL模式(如
/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模式上映射此筛选器

此外,您需要确保已禁用这些页面上的浏览器缓存,否则最终用户在注销后仍能从浏览器缓存中看到它们。您也可以为此使用过滤器。你甚至可以在同一个过滤器中完成。另见