|  |  | package com.sunyo.wlpt.cloud.config.server.config; | 
|  |  |  | 
|  |  | import org.springframework.stereotype.Component; | 
|  |  |  | 
|  |  | import javax.servlet.*; | 
|  |  | import javax.servlet.http.HttpServletRequest; | 
|  |  | import javax.servlet.http.HttpServletRequestWrapper; | 
|  |  | import javax.servlet.http.HttpServletResponse; | 
|  |  | import java.io.BufferedReader; | 
|  |  | import java.io.ByteArrayInputStream; | 
|  |  | import java.io.IOException; | 
|  |  |  | 
|  |  | /** | 
|  |  | * @author 子诚 | 
|  |  | * Description:解决GitLab的web钩子报错400问题。是因为gitlab自己添加一堆东西导致JSON解析异常 | 
|  |  | * 时间:2020/6/23 17:10 | 
|  |  | */ | 
|  |  | @Component | 
|  |  | public class UrlFilter  implements Filter { | 
|  |  | @Override | 
|  |  | public void init(FilterConfig filterConfig) throws ServletException { | 
|  |  |  | 
|  |  | } | 
|  |  |  | 
|  |  | @Override | 
|  |  | public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { | 
|  |  | HttpServletRequest httpServletRequest = (HttpServletRequest)request; | 
|  |  | HttpServletResponse httpServletResponse = (HttpServletResponse)response; | 
|  |  |  | 
|  |  | String url = new String(httpServletRequest.getRequestURI()); | 
|  |  |  | 
|  |  | //只过滤/actuator/bus-refresh请求 | 
|  |  | if (!url.endsWith("/bus-refresh")) { | 
|  |  | chain.doFilter(request, response); | 
|  |  | return; | 
|  |  | } | 
|  |  |  | 
|  |  | //获取原始的body | 
|  |  | String body = readAsChars(httpServletRequest); | 
|  |  |  | 
|  |  | System.out.println("original body:   "+ body); | 
|  |  |  | 
|  |  | //使用HttpServletRequest包装原始请求达到修改post请求中body内容的目的 | 
|  |  | CustometRequestWrapper requestWrapper = new CustometRequestWrapper(httpServletRequest); | 
|  |  |  | 
|  |  | chain.doFilter(requestWrapper, response); | 
|  |  |  | 
|  |  | } | 
|  |  |  | 
|  |  | @Override | 
|  |  | public void destroy() { | 
|  |  |  | 
|  |  | } | 
|  |  |  | 
|  |  | private class CustometRequestWrapper extends HttpServletRequestWrapper { | 
|  |  | public CustometRequestWrapper(HttpServletRequest request) { | 
|  |  | super(request); | 
|  |  | } | 
|  |  |  | 
|  |  | @Override | 
|  |  | public ServletInputStream getInputStream() throws IOException { | 
|  |  | byte[] bytes = new byte[0]; | 
|  |  | ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes); | 
|  |  |  | 
|  |  | return new ServletInputStream() { | 
|  |  | @Override | 
|  |  | public boolean isFinished() { | 
|  |  | return byteArrayInputStream.read() == -1 ? true:false; | 
|  |  | } | 
|  |  |  | 
|  |  | @Override | 
|  |  | public boolean isReady() { | 
|  |  | return false; | 
|  |  | } | 
|  |  |  | 
|  |  | @Override | 
|  |  | public void setReadListener(ReadListener readListener) { | 
|  |  |  | 
|  |  | } | 
|  |  |  | 
|  |  | @Override | 
|  |  | public int read() throws IOException { | 
|  |  | return byteArrayInputStream.read(); | 
|  |  | } | 
|  |  | }; | 
|  |  | } | 
|  |  | } | 
|  |  |  | 
|  |  | public static String readAsChars(HttpServletRequest request) | 
|  |  | { | 
|  |  |  | 
|  |  | BufferedReader br = null; | 
|  |  | StringBuilder sb = new StringBuilder(""); | 
|  |  | try | 
|  |  | { | 
|  |  | br = request.getReader(); | 
|  |  | String str; | 
|  |  | while ((str = br.readLine()) != null) | 
|  |  | { | 
|  |  | sb.append(str); | 
|  |  | } | 
|  |  | br.close(); | 
|  |  | } | 
|  |  | catch (IOException e) | 
|  |  | { | 
|  |  | e.printStackTrace(); | 
|  |  | } | 
|  |  | finally | 
|  |  | { | 
|  |  | if (null != br) | 
|  |  | { | 
|  |  | try | 
|  |  | { | 
|  |  | br.close(); | 
|  |  | } | 
|  |  | catch (IOException e) | 
|  |  | { | 
|  |  | e.printStackTrace(); | 
|  |  | } | 
|  |  | } | 
|  |  | } | 
|  |  | return sb.toString(); | 
|  |  | } | 
|  |  | } | 
... | ... |  |