我在项目中配置的过滤器设置的路径是/*,这意味着每一个资源都会被拦截,这时候如果我们想把一些资源拿出来不让其被拦截时(比如说某些css样式,js等静态文件),我们就需要在重写的过滤器的init方法中做些文章了:
首先,在init方法中,我们可以通过代码得到web.xml中filter的init-param中配置的不想被拦截的资源:
<init-param>
<param-name>ignores</param-name>
<param-value>/images,/js,/css,/LoginServlet,/login</param-value>
</init-param>
public void init(FilterConfig config) throws ServletException {
String cp = config.getServletContext().getContextPath();
String ignoresParam = config.getInitParameter("ignores");
String[] ignoreArray = ignoresParam.split(",");
for (String s : ignoreArray) {
prefixIignores.add(cp + s);
}
}
然后我们可以写一个是否被过滤的方法:
private boolean canIgnore(HttpServletRequest request) {
String url = request.getRequestURI();
for (String ignore : prefixIignores) {
System.out.println("url------------->"+url);
if (url.startsWith(ignore)) {
return true;
}
}
return false;
}
将该方法放入doFilter中:
if (canIgnore(request)) {
filterChain.doFilter(request, response);
return;
}
这样,我们就可以设置一些我们不需要拦截的资源啦!
参考文章:http://blog.csdn.net/u012246342/article/details/52228949