Interceptor gets request parameters

Regardless of whether it is post submission or get submission, whether the parameters are placed in url or form-data, or placed in the request body in the form of json, they can be obtained normally without affecting the use of the controller. Here to get the parameter name as an example

  • filter
@Component
public class MyFilter implements Filter {
    
    
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    
    
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    
    
        ServletRequest requestWrapper = null;
        String header = ((HttpServletRequest) servletRequest).getHeader("Content-Type");
        if(header != null && "multipart/form-data".equals(header.split(";")[0])) {
    
    

        }else  {
    
    
            requestWrapper = new MyHttpServletRequestWrapper((HttpServletRequest) servletRequest);
        }
        if (requestWrapper == null) {
    
    
            filterChain.doFilter(servletRequest, servletResponse);
        }else {
    
    
            filterChain.doFilter(requestWrapper,servletResponse);
        }
    }

    @Override
    public void destroy() {
    
    
    }
}
  • Custom request wrapper class
public class MyHttpServletRequestWrapper extends HttpServletRequestWrapper {
    
    

    private final String body;

    public MyHttpServletRequestWrapper(HttpServletRequest request) throws IOException {
    
    
        super(request);
        InputStream is = null;
        StringBuilder sb = null;
        try {
    
    
            is = request.getInputStream();
            sb = new StringBuilder();
            byte[] b = new byte[4096];
            for (int n ; (n = is.read(b)) != -1;)
            {
    
    
                sb.append(new String(b, 0, n));
            }
        } finally {
    
    
            if(is != null) {
    
    
                is.close();
            }
        }
        body = sb.toString();
    }

    @Override
    public ServletInputStream getInputStream() throws IOException {
    
    
        final ByteArrayInputStream bais = new ByteArrayInputStream(body.getBytes());
        return new ServletInputStream() {
    
    

            @Override
            public boolean isFinished() {
    
    
                return false;
            }

            @Override
            public boolean isReady() {
    
    
                return false;
            }

            @Override
            public void setReadListener(ReadListener readListener) {
    
    

            }
			@Override
            public int read() throws IOException {
    
    

                return bais.read();

            }

            @Override
            public void close() throws IOException {
    
    
                System.out.println(1);
                bais.close();
            }
        };
    }

    public String getBody() {
    
    
        return body;
    }
}
  • Interceptor
@Component
public class MyInterceptor implements HandlerInterceptor {
    
    

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    
    
        String method = request.getMethod();
        String header = request.getHeader("Content-Type");
        System.out.println(header);
        if("GET".equals(method) || "multipart/form-data".equals(header.split(";")[0])) {
    
    
            String name = request.getParameter("name");
            System.out.println(name);
        }else if("POST".equals(method)) {
    
    
            MyHttpServletRequestWrapper requestWrapper = new MyHttpServletRequestWrapper(request);
            String body = requestWrapper.getBody();
            Map map = JSON.parseObject(body, Map.class);
            Object name = map.get("name");
            System.out.println(name);
        }
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    
    
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    
    

    }
}
  • Interceptor configuration
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    
    

    @Autowired
    MyInterceptor myInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
    
    
        registry.addInterceptor(myInterceptor).addPathPatterns("/**");
    }
}

Guess you like

Origin blog.csdn.net/weixin_44981707/article/details/105303757