Java Tomcat容器多次调用过滤器
在理解java过滤器的特定行为方面,我希望得到一些帮助:我编写了一个简单的过滤器,它可以获取所有用户请求,如果未登录的用户需要受限的资源,过滤器会将用户转发到主页。这是我的密码:Java Tomcat容器多次调用过滤器,java,servlets,servlet-filters,Java,Servlets,Servlet Filters,在理解java过滤器的特定行为方面,我希望得到一些帮助:我编写了一个简单的过滤器,它可以获取所有用户请求,如果未登录的用户需要受限的资源,过滤器会将用户转发到主页。这是我的密码: public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated meth
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here
HttpServletRequest req = (HttpServletRequest) request;
String uri = req.getRequestURI();
System.out.println("\n\nFILTERING...\n\n");
//Se la risorsa appartiene all'area ristretta e l'utente non è
//loggato lo sbatto fuori
if(uri.contains("restricted") && (req.getSession(false) == null || req.getSession(false).getAttribute("user") == null)) {
System.out.println("\n\nCannot access\n\n");
//((HttpServletResponse) response).sendRedirect("/Hotel/index.jsp");
req.getRequestDispatcher("/index.jsp").forward(request, response);
}
else {
// pass the request along the filter chain
System.out.println("\n\nNext step\n\n");
chain.doFilter(request, response);
}
}
以及web.xml中的映射:
我的过滤器
mycontroller.MyFilter
我的过滤器
/*
让我感到奇怪的是,如果我通过URL请求受限资源,doFilter方法在移动到主服务器之前会被调用数次(服务器记录“筛选…无法访问”4,5次)。
我正在使用Tomcat7。
有人能帮我理解吗?非常感谢您已将筛选器映射到
/*
。因此,它将拦截每个HTTP请求。不仅是HTML/JSP页面,还有静态资源,如CSS、JS和图像文件。显然,您请求了一个HTML/JSP页面,该页面反过来引用了几个CSS、JS和/或图像文件
您在过滤器中的检查也很差。您应该将过滤器映射到/restricted/*
/restricted/*
然后从过滤器的代码中删除URI检查。如果您将这些静态资源放在该映射之外,例如在
/static
或/resources
等中,则不会为它们调用筛选器。Uriah Carpenter回答了一个与此问题非常类似的问题:->客户端对页面上的每个组件发出不同的请求。无论如何谢谢你