|
|
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();
|
|
|
}
|
|
|
} |
...
|
...
|
|