自定義filter中配置不被過濾的資源
阿新 • • 發佈:2019-01-27
我在專案中配置的過濾器設定的路徑是/*,這意味著每一個資源都會被攔截,這時候如果我們想把一些資源拿出來不讓其被攔截時(比如說某些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;
}
這樣,我們就可以設定一些我們不需要攔截的資源啦!