Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.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
Java 在web.xml url模式匹配器中,是否有排除url的方法?_Java_Spring_Tomcat_Servlet Filters - Fatal编程技术网

Java 在web.xml url模式匹配器中,是否有排除url的方法?

Java 在web.xml url模式匹配器中,是否有排除url的方法?,java,spring,tomcat,servlet-filters,Java,Spring,Tomcat,Servlet Filters,我编写了一个过滤器,除了CSS、JS和图像文件之外,每次访问我网站上的url时都需要调用它。因此,在我的定义中,我希望有如下内容: <filter-mapping> <filter-name>myAuthorizationFilter</filter-name> <url-pattern>NOT /css && NOT /js && NOT /images</url-pattern> <

我编写了一个过滤器,除了CSS、JS和图像文件之外,每次访问我网站上的url时都需要调用它。因此,在我的定义中,我希望有如下内容:

<filter-mapping>
   <filter-name>myAuthorizationFilter</filter-name>
   <url-pattern>NOT /css && NOT /js && NOT /images</url-pattern>
</filter-mapping>

我想你可以试试这个:

@WebFilter(filterName = "myFilter", urlPatterns = {"*.xhtml"})
public class MyFilter implements Filter {

   @Override
   public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
      String path = ((HttpServletRequest) request).getServletPath();

      if (excludeFromFilter(path)) chain.doFilter(request, response);
      else // do something
   }

   private boolean excludeFromFilter(String path) {
      if (path.startsWith("/javax.faces.resource")) return true; // add more page to exclude here
      else return false;
   }
}

URL模式映射不支持排除。这是Servlet规范的一个限制。您可以尝试J4mes先生发布的手动解决方法。

可能您可以为
css
js
等声明另一个“空白”筛选器,并将其放在其他筛选器映射之前。

我使用了安全约束来访问控制。参见代码:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Unsecured resources</web-resource-name>
        <url-pattern>/resources/*</url-pattern>
        <url-pattern>/javax.faces.resource/*</url-pattern>
    </web-resource-collection>
</security-constraint>

无担保资源
/资源/*
/javax.faces.resource/*

我遵循教程。

@WebFilter来自哪里?我目前正在使用SpringMVC,我正在使用@Service(value=“myAuthorizationFilter”)定义我的过滤器,我认为这是一个普通的JavaEE注释。我最终做了一些非常类似的事情,但我使用了带有模式和匹配器的正则表达式。类似这样:
private static Pattern excludeUrls=Pattern.compile(“^.*/(css | js | images | ckeditor)/.*$”,Pattern.CASE不区分大小写):P然后您应该更新您的问题,说明您是如何成功完成此操作的,并且您可以将此问题也标记为答案=P。可能重复的
<security-constraint>
    <web-resource-collection>
        <web-resource-name>Unsecured resources</web-resource-name>
        <url-pattern>/resources/*</url-pattern>
        <url-pattern>/javax.faces.resource/*</url-pattern>
    </web-resource-collection>
</security-constraint>