@WebFilter exclude url-pattern

后端 未结 2 640
轮回少年
轮回少年 2020-12-24 14:05

I use a filter to check URL patterns for the logged in user.

But I have many URL patterns I need to filter.

{ \"/table/*\", \"/user/*\", \"/contact/*         


        
2条回答
  •  感动是毒
    2020-12-24 15:05

    You can use initParam to have some excluded patterns and implement your logic. This is basically the same as BalusC's answer except by using initParam it can be written in the web.xml if you want/need to.

    Below I am ignoring some binary (jpeg jpg png pdf) extensions:

    @WebFilter(urlPatterns = { "/*" },
        initParams = { @WebInitParam(name = "excludedExt", value = "jpeg jpg png pdf") }
    )
    public class GzipFilter implements Filter {
    
        private static final Set excluded;
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            String excludedString = filterConfig.getInitParameter("excludedExt");
            if (excludedString != null) {
                excluded = Collections.unmodifiableSet(
                    new HashSet<>(Arrays.asList(excludedString.split(" ", 0))));
            } else {
                excluded = Collections.emptySet();
            }
        }
    
        boolean isExcluded(HttpServletRequest request) {
            String path = request.getRequestURI();
            String extension = path.substring(path.indexOf('.', path.lastIndexOf('/')) + 1).toLowerCase();
            return excluded.contains(extension);
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            System.out.print("GzipFilter");
            HttpServletRequest httpRequest = (HttpServletRequest) request;
            HttpServletResponse httpResponse = (HttpServletResponse) response;
            if (isExcluded(httpRequest)) {
                chain.doFilter(request, response);
                return;
            }
    
            // Do your stuff here
        }
    }
    

提交回复
热议问题