拦截器的使用
配置生效
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new RequestInterceptor()).addPathPatterns("/**");
}
}
extends HandlerInterceptorAdapter
@Component
public class RequestInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
response.setHeader("Date", "2020-12-01 10:11:12");
setRequestHeader(request, "id", "11111");
Map headerMap=getHeader(request);
getBody(request);
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
}
private void setRequestHeader(HttpServletRequest request, String key, String value) {
Class<? extends HttpServletRequest> requestClass = request.getClass();
try {
Field request1 = requestClass.getDeclaredField("request");
request1.setAccessible(true);
Object o = request1.get(request);
Field coyoteRequest = o.getClass().getDeclaredField("coyoteRequest");
coyoteRequest.setAccessible(true);
Object o1 = coyoteRequest.get(o);
Field headers = o1.getClass().getDeclaredField("headers");
headers.setAccessible(true);
MimeHeaders o2 = (MimeHeaders) headers.get(o1);
o2.addValue(key).setString(value);
} catch (Exception e) {
e.printStackTrace();
}
}
private Map getHeader(HttpServletRequest httpServletRequest)
{
Map harders = new HashMap<HeaderEnum, String>();
for (HeaderEnum headerenum : HeaderEnum.values()) {
String value = httpServletRequest.getHeader(headerenum.getValue());
harders.put(headerenum, value);
}
return harders;
}
private String getBody(HttpServletRequest httpServletRequest)
{
InputStream inputStream = request.getInputStream();
StringBuilder sb = new StringBuilder();
String line;
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
while ((line = br.readLine()) != null) {
sb.append(line);
}
inputStream.close();
br.close();
return sb.toString();
}
}