自定义filter中配置不被过滤的资源

1.web.xml中配置

<!-- token filter-->
    <filter>
        <filter-name>tokenFilter</filter-name>
        <filter-class>com.zpkj.template.filter.TokenFilter</filter-class>
        <init-param>
            <param-name>ignores</param-name>
            <param-value>/app/register,/app/login</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>tokenFilter</filter-name>
        <url-pattern>/app/*</url-pattern>
    </filter-mapping>


2、Filter实现类中代码

public class TokenFilter implements Filter {
    private String excludedPage;
    private String[] excludedPages;

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        excludedPage = filterConfig.getInitParameter("ignores");//此处的ignores就是在web.xml定义的名称一样。
        if (excludedPage != null && excludedPage.length() > 0){
            excludedPages = excludedPage.split(",");
        }
    }



    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;

        // 定义表示变量 并验证用户请求URL 是否包含不过滤路径
        boolean flag = false;
        for (String page:excludedPages) {
            if (request.getRequestURI().equals(page)){
                flag = true;
            }
        }
        if(flag){
            chain.doFilter(request,response);
        }

    }

    @Override
    public void destroy() {

    }
}


项目:template-副本
--------------------- 
作者:嘿hei 
来源:CSDN 
原文:https://blog.csdn.net/hei_guolanfang/article/details/79868932 
版权声明:本文为博主原创文章,转载请附上博文链接!

第二种看起来逻辑更清晰的写法

我在项目中配置的过滤器设置的路径是/*,这意味着每一个资源都会被拦截,这时候如果我们想把一些资源拿出来不让其被拦截时(比如说某些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

--------------------- 
作者:vince_Da 
来源:CSDN 
原文:https://blog.csdn.net/vince_Da/article/details/70665918 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/sdujava2011/article/details/83578639