Java Servlet筛选器链顺序在不断刷新时发生更改

Java Servlet筛选器链顺序在不断刷新时发生更改,java,servlets,filter,servlet-filters,Java,Servlets,Filter,Servlet Filters,在我的应用程序中,我们实现了几个过滤器。例如,我有三个过滤器 区域设置过滤器 许可证过滤器 登录筛选器 订单在正常情况下运行良好。但是,当我进行持续刷新时,它有时会跳过许可证过滤器(然后执行:Locale Filter->Login Filter) 有没有办法避免这种情况?即使我不断刷新,顺序也不会改变。每次都应该遵循这个顺序 public class LicenseFilter implements Filter { @Override public void destroy() { }

在我的应用程序中,我们实现了几个过滤器。例如,我有三个过滤器

  • 区域设置过滤器
  • 许可证过滤器
  • 登录筛选器
  • 订单在正常情况下运行良好。但是,当我进行持续刷新时,它有时会跳过许可证过滤器(然后执行:Locale Filter->Login Filter)

    有没有办法避免这种情况?即使我不断刷新,顺序也不会改变。每次都应该遵循这个顺序

    public class LicenseFilter implements Filter {
    
    @Override
    public void destroy() {
    
    }
    
    
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            throws IOException, ServletException {
    
            try {
                        LOGGER.info("In LicenseFilter");    
                        licenseValidator.validate();
                        chain.doFilter(req, res);
                }catch (Exception excep) {  
                         LOGGER.error("License Error " + excep.getMessage());               
                         req.setAttribute("error", excep.getMessage());
                        RequestDispatcher dispatcher = req
                                .getRequestDispatcher("license_list.action");
                        dispatcher.forward(req, res);
                } 
            } 
    
    }
    
    @Override
    public void init(FilterConfig cfg) throws ServletException {
    
        WebApplicationContext wctx = WebApplicationContextUtils.getWebApplicationContext(cfg
                .getServletContext());
        licenseValidator = (licenseValidator) wctx.getBean("licenseValidator");
        ctx = cfg.getServletContext().getContextPath();
    
    }
    
    }

    web.xml

    xmlns=”http://java.sun.com/xml/ns/javaee"
    xmlns:web=”http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation=”http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version=“2.5”>
    网状物
    上下文配置位置
    META-INF/beans-*.xml
    本地过滤器
    com.filter.LocaleFilter
    本地过滤器
    /*
    许可证过滤器
    com.filter.licenseFilter
    许可证过滤器
    /*
    逻辑过滤器
    com.filter.LoginFilter
    逻辑过滤器
    /*
    index.html
    

    您如何知道已跳过许可证筛选器?你能附上你的许可证过滤器的doFilter方法的一个片段吗?使用Logger我知道许可证过滤器被跳过了。如果我没有任何有效的许可证,我应该重定向许可证页面,否则下一个过滤器应该执行。一切正常。当我发出连续请求(刷新)时,许可证过滤器被绕过,下一个过滤器被执行web.xml是什么?过滤器的url模式定义正确吗?是的,每件事都定义正确,这就是为什么它在正常情况下工作没有问题。所以请理解,它不仅适用于持续刷新。
    xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">
    <display-name>web</display-name>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>META-INF/beans-*.xml</param-value>
    </context-param>
    
       <filter>
        <filter-name>localeFilter </filter-name>
        <filter-class>com.filter.LocaleFilter</filter-class>
       </filter>
    
    <filter-mapping>
        <filter-name>localeFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
     <filter>
        <filter-name>licenseFilter</filter-name>
        <filter-class>com.filter.licenseFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>licenseFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
     <filter>
        <filter-name>loginFilter</filter-name>
        <filter-class>com.filter.LoginFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>loginFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>   
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>