我编写了一个过滤器,每次访问我网站上的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());
}
答案 0 :(得分:21)
我想你可以尝试这个:
@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;
}
}
答案 1 :(得分:5)
网址格式映射不支持排除。这是Servlet规范的限制。您可以尝试Mr.J4mes发布的手动解决方法。
答案 2 :(得分:1)
可能您可以为css
,js
等声明另一个“空白”过滤器,并将其放在其他过滤器映射之前。
答案 3 :(得分:0)
我使用security-constraint来访问控制。见代码:
<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>
我按照this教程。