Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Session 其他用户仍可访问受登录筛选器限制的页面_Session_Jsf 2_Servlet Filters - Fatal编程技术网

Session 其他用户仍可访问受登录筛选器限制的页面

Session 其他用户仍可访问受登录筛选器限制的页面,session,jsf-2,servlet-filters,Session,Jsf 2,Servlet Filters,我在我的登录应用程序中使用过滤器。我只想要几页 由管理员访问。我已经把这些页面保存在管理文件夹和 在我的项目中实现了过滤器。但是页面仍然可以访问 通过其他用户的URL 我错在哪里 import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletExcep

我在我的登录应用程序中使用过滤器。我只想要几页 由管理员访问。我已经把这些页面保存在管理文件夹和 在我的项目中实现了过滤器。但是页面仍然可以访问 通过其他用户的URL

我错在哪里

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


public class LoginFilter implements Filter {

    @Override
    public void init(FilterConfig config) throws ServletException {
        // If you have any <init-param> in web.xml, then you could get them
        // here by config.getInitParameter("name") and assign it as field.
    }

    @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);

        if (session == null || session.getAttribute("user") == null) {
            response.sendRedirect(request.getContextPath() + "/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.
        }
    }

    @Override
    public void destroy() {
        // If you have assigned any expensive resources as field of
        // this Filter class, then you could clean/close them here.
    }

}
import java.io.IOException;
导入javax.servlet.Filter;
导入javax.servlet.FilterChain;
导入javax.servlet.FilterConfig;
导入javax.servlet.ServletException;
导入javax.servlet.ServletRequest;
导入javax.servlet.ServletResponse;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入javax.servlet.http.HttpSession;
公共类LoginFilter实现过滤器{
@凌驾
public void init(FilterConfig config)抛出ServletException{
//如果您在web.xml中有任何文档,那么您可以获取它们
//这里使用config.getInitParameter(“name”)并将其指定为字段。
}
@凌驾
public void doFilter(ServletRequest-req、ServletResponse-res、FilterChain-chain)抛出IOException、ServletException{
HttpServletRequest请求=(HttpServletRequest)请求;
HttpServletResponse=(HttpServletResponse)res;
HttpSession session=request.getSession(false);
if(session==null | | session.getAttribute(“用户”)==null){
response.sendRedirect(request.getContextPath()+“/Login.xhtml”);//找不到登录用户,因此重定向到登录页面。
}否则{
chain.doFilter(req,res);//找到登录用户,所以只需继续请求即可。
}
}
@凌驾
公共空间销毁(){
//如果您已将任何昂贵的资源分配为
//此筛选器类,然后您可以在此处清理/关闭它们。
}
}

理论上有两个可能的原因:

  • 过滤器根本不运行
  • 筛选器不保护应用程序的页面

我知道这听起来很琐碎,但您能否指定过滤器是否运行,如果是,您是否会访问chain.doFilter(req,res)

在上面的问题规范中,我已经包括了所有与登录相关的代码,除了UI。。。我哪里做错了???如果过滤器没有被执行,那么我需要做什么来纠正它?是的,但是你试过调试它吗?毕竟你可以像调试其他代码一样调试过滤器。您试图访问的URL是什么?您已将筛选器定义为仅应用于以admin/…开头的URL。。。你告诉我你的过滤器根本没有运行?我记得有一次我看到Tomcat引擎没有正确处理放入默认包中的servlet(大约5年前)。请尝试将过滤器放入一些包中在另一个包中添加过滤器后,我仍然面临相同的问题,这是我想限制其他用户访问的url。如果是这样,为什么web.xml中的url模式包含/admin/?它应该类似于/faces/admin/*对吗?