1. 程式人生 > >自定義filter中配置不被過濾的資源

自定義filter中配置不被過濾的資源

我在專案中配置的過濾器設定的路徑是/*,這意味著每一個資源都會被攔截,這時候如果我們想把一些資源拿出來不讓其被攔截時(比如說某些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;  
        } 

這樣,我們就可以設定一些我們不需要攔截的資源啦!