Java Filter URL pattern specific to request params

后端 未结 2 1846
广开言路
广开言路 2020-12-10 09:07

We have a situation where we want to use filter for URL\'s containing some specific request parameters, e.g:

http://mydomain.com/?id=78&formtype=simple_form&.....         


        
2条回答
  •  谎友^
    谎友^ (楼主)
    2020-12-10 09:47

    As far as I know there is no solution for matching requests to filters by query string directly in web.xml. So you could register the filter in your web.xml using init-params to make the filter configurable and set a pattern via void init(FilterConfig filterConfig) in your javax.servlet.Filter implementation.

    package mypackage;
    
    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    
    public class MyFilter implements Filter {
    
        private String pattern;
    
        @Override
        public void destroy() {
            // TODO Auto-generated method stub
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            // check whether we have a httpServletRequest and a pattern
            if (this.pattern != null && request instanceof HttpServletRequest) {
                // resolve the query string from the httpServletRequest
                String queryString = ((HttpServletRequest) request).getQueryString();
                // check whether a query string exists and matches the given pattern
                if (queryString != null && queryString.matches(pattern)) {
                    // TODO do someting special
                }
            }
            chain.doFilter(request, response);
        }
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            this.pattern = filterConfig.getInitParameter("pattern");
        }
    
    }
    

    The configuration would look like this in your web.xml:

    
    
        myFilter
        mypackage.MyFilter
        
            pattern
            {{PATTERN HERE}}
        
    
    
    
        myFilter
        /*
    
    

    Further readings:
    http://java.sun.com/javaee/5/docs/api/javax/servlet/Filter.html

提交回复
热议问题