我编写了一个过滤器,每次访问我网站上的 URL 时都需要调用它,除了 CSS、JS 和 IMAGE 文件。所以在我的定义中,我想有类似的东西:
<filter-mapping>
<filter-name>myAuthorizationFilter</filter-name>
<url-pattern>NOT /css && NOT /js && NOT /images</url-pattern>
</filter-mapping>
有没有办法做到这一点?我能找到的唯一文档只有/*
更新:
我最终使用了类似于 Mr.J4mes 提供的答案:
private static Pattern excludeUrls = Pattern.compile("^.*/(css|js|images)/.*$", Pattern.CASE_INSENSITIVE);
private boolean isWorthyRequest(HttpServletRequest request) {
String url = request.getRequestURI().toString();
Matcher m = excludeUrls.matcher(url);
return (!m.matches());
}
最佳答案
我想你可以试试这个:
@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;
}
}
关于java - 在 web.xml url-pattern 匹配器中是否有排除 URL 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8658949/