|  |  | 1 | +package com.sunyo.wlpt.cloud.config.server.config; | 
|  |  | 2 | + | 
|  |  | 3 | +import org.springframework.stereotype.Component; | 
|  |  | 4 | + | 
|  |  | 5 | +import javax.servlet.*; | 
|  |  | 6 | +import javax.servlet.http.HttpServletRequest; | 
|  |  | 7 | +import javax.servlet.http.HttpServletRequestWrapper; | 
|  |  | 8 | +import javax.servlet.http.HttpServletResponse; | 
|  |  | 9 | +import java.io.BufferedReader; | 
|  |  | 10 | +import java.io.ByteArrayInputStream; | 
|  |  | 11 | +import java.io.IOException; | 
|  |  | 12 | + | 
|  |  | 13 | +/** | 
|  |  | 14 | + * @author 子诚 | 
|  |  | 15 | + * Description:解决GitLab的web钩子报错400问题。是因为gitlab自己添加一堆东西导致JSON解析异常 | 
|  |  | 16 | + * 时间:2020/6/23 17:10 | 
|  |  | 17 | + */ | 
|  |  | 18 | +@Component | 
|  |  | 19 | +public class UrlFilter  implements Filter { | 
|  |  | 20 | +    @Override | 
|  |  | 21 | +    public void init(FilterConfig filterConfig) throws ServletException { | 
|  |  | 22 | + | 
|  |  | 23 | +    } | 
|  |  | 24 | + | 
|  |  | 25 | +    @Override | 
|  |  | 26 | +    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { | 
|  |  | 27 | +        HttpServletRequest httpServletRequest = (HttpServletRequest)request; | 
|  |  | 28 | +        HttpServletResponse httpServletResponse = (HttpServletResponse)response; | 
|  |  | 29 | + | 
|  |  | 30 | +        String url = new String(httpServletRequest.getRequestURI()); | 
|  |  | 31 | + | 
|  |  | 32 | +        //只过滤/actuator/bus-refresh请求 | 
|  |  | 33 | +        if (!url.endsWith("/bus-refresh")) { | 
|  |  | 34 | +            chain.doFilter(request, response); | 
|  |  | 35 | +            return; | 
|  |  | 36 | +        } | 
|  |  | 37 | + | 
|  |  | 38 | +        //获取原始的body | 
|  |  | 39 | +        String body = readAsChars(httpServletRequest); | 
|  |  | 40 | + | 
|  |  | 41 | +        System.out.println("original body:   "+ body); | 
|  |  | 42 | + | 
|  |  | 43 | +        //使用HttpServletRequest包装原始请求达到修改post请求中body内容的目的 | 
|  |  | 44 | +        CustometRequestWrapper requestWrapper = new CustometRequestWrapper(httpServletRequest); | 
|  |  | 45 | + | 
|  |  | 46 | +        chain.doFilter(requestWrapper, response); | 
|  |  | 47 | + | 
|  |  | 48 | +    } | 
|  |  | 49 | + | 
|  |  | 50 | +    @Override | 
|  |  | 51 | +    public void destroy() { | 
|  |  | 52 | + | 
|  |  | 53 | +    } | 
|  |  | 54 | + | 
|  |  | 55 | +    private class CustometRequestWrapper extends HttpServletRequestWrapper { | 
|  |  | 56 | +        public CustometRequestWrapper(HttpServletRequest request) { | 
|  |  | 57 | +            super(request); | 
|  |  | 58 | +        } | 
|  |  | 59 | + | 
|  |  | 60 | +        @Override | 
|  |  | 61 | +        public ServletInputStream getInputStream() throws IOException { | 
|  |  | 62 | +            byte[] bytes = new byte[0]; | 
|  |  | 63 | +            ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes); | 
|  |  | 64 | + | 
|  |  | 65 | +            return new ServletInputStream() { | 
|  |  | 66 | +                @Override | 
|  |  | 67 | +                public boolean isFinished() { | 
|  |  | 68 | +                    return byteArrayInputStream.read() == -1 ? true:false; | 
|  |  | 69 | +                } | 
|  |  | 70 | + | 
|  |  | 71 | +                @Override | 
|  |  | 72 | +                public boolean isReady() { | 
|  |  | 73 | +                    return false; | 
|  |  | 74 | +                } | 
|  |  | 75 | + | 
|  |  | 76 | +                @Override | 
|  |  | 77 | +                public void setReadListener(ReadListener readListener) { | 
|  |  | 78 | + | 
|  |  | 79 | +                } | 
|  |  | 80 | + | 
|  |  | 81 | +                @Override | 
|  |  | 82 | +                public int read() throws IOException { | 
|  |  | 83 | +                    return byteArrayInputStream.read(); | 
|  |  | 84 | +                } | 
|  |  | 85 | +            }; | 
|  |  | 86 | +        } | 
|  |  | 87 | +    } | 
|  |  | 88 | + | 
|  |  | 89 | +    public static String readAsChars(HttpServletRequest request) | 
|  |  | 90 | +    { | 
|  |  | 91 | + | 
|  |  | 92 | +        BufferedReader br = null; | 
|  |  | 93 | +        StringBuilder sb = new StringBuilder(""); | 
|  |  | 94 | +        try | 
|  |  | 95 | +        { | 
|  |  | 96 | +            br = request.getReader(); | 
|  |  | 97 | +            String str; | 
|  |  | 98 | +            while ((str = br.readLine()) != null) | 
|  |  | 99 | +            { | 
|  |  | 100 | +                sb.append(str); | 
|  |  | 101 | +            } | 
|  |  | 102 | +            br.close(); | 
|  |  | 103 | +        } | 
|  |  | 104 | +        catch (IOException e) | 
|  |  | 105 | +        { | 
|  |  | 106 | +            e.printStackTrace(); | 
|  |  | 107 | +        } | 
|  |  | 108 | +        finally | 
|  |  | 109 | +        { | 
|  |  | 110 | +            if (null != br) | 
|  |  | 111 | +            { | 
|  |  | 112 | +                try | 
|  |  | 113 | +                { | 
|  |  | 114 | +                    br.close(); | 
|  |  | 115 | +                } | 
|  |  | 116 | +                catch (IOException e) | 
|  |  | 117 | +                { | 
|  |  | 118 | +                    e.printStackTrace(); | 
|  |  | 119 | +                } | 
|  |  | 120 | +            } | 
|  |  | 121 | +        } | 
|  |  | 122 | +        return sb.toString(); | 
|  |  | 123 | +    } | 
|  |  | 124 | +} |