1.自定义拦截器
package ;
import ;
import ;
import ;
import ;
import ;
import ;
import org.;
import org.;
import ;
import ;
import ;
import ;
import ;
import ;
/**
* Description: 请求拦截器
*
* @version 1.0 @ClassName RequestInterceptor @Author xulei
* @date 2021/3/2 17:42
*/
@Component
@Order(1)
public class RequestInterceptor implements HandlerInterceptor {
private final Logger logger = ();
private static final String GET_METHOD = "GET";
private static final String POST_METHOD = "POST";
@Autowired private IModelService iModelService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
(
"请求方式===={},请求uri===={},response==={},拦截的方法==={}",
(),
(),
response,
((HandlerMethod) handler).getMethod().getName());
CheckNamespaceLegalParam checkNamespaceLegalParam = new CheckNamespaceLegalParam();
(("Authorization"));
(());
if (().toUpperCase().equals(GET_METHOD)) {
// (("Authorization"));
(("namespace"));
}
if (().toUpperCase().equals(POST_METHOD)) {
byte[] bodyBytes = (());
String body = new String(bodyBytes, ());
(
(body, ).get("namespace").toString());
("请求体:{}", body);
}
return (checkNamespaceLegalParam);
}
}
2.由于post请求参数在body中获取,request中的资源只能获取一次,进而要将body保存下来,重写HttpServletRequestWrapper
package ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import org.;
import org.;
import ;
/**
* Description: 解决请求拦截器获取body参数请求放过后报错问题Required request body is missing
*
* @version 1.0 @ClassName CustomHttpServletRequestWrapper @Author xulei
* @date 2021/3/3 15:46
*/
// @Component
public class CustomHttpServletRequestWrapper extends HttpServletRequestWrapper {
private final Logger logger = ();
/** 缓存下来的HTTP body */
private byte[] body;
public CustomHttpServletRequestWrapper(HttpServletRequest request) throws IOException {
super(request);
body = (());
}
@Override
public ServletInputStream getInputStream() throws IOException {
if (body == null) {
body = new byte[0];
}
InputStream bodyStream = new ByteArrayInputStream(body);
return new ServletInputStream() {
@Override
public int read() throws IOException {
return ();
}
@Override
public boolean isFinished() {
return false;
}
@Override
public boolean isReady() {
return false;
}
@Override
public void setReadListener(ReadListener readListener) {}
};
}
// 对外提供读取流的方法
@Override
public BufferedReader getReader() throws IOException {
// InputStream bodyStream = new ByteArrayInputStream(body);
return new BufferedReader(new InputStreamReader(getInputStream()));
}
}
3.自定义过滤器,并且注册进springboot
package ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
/**
* Description: 过滤器
*
* @version 1.0 @ClassName WebFilter @Author xulei
* @date 2021/3/3 16:42
*/
@Order(-1)
@(filterName = "webFilter", urlPatterns = "/*")
@Component
public class WebFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {}
@Override
public void doFilter(
ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)
throws IOException, ServletException {
ServletRequest request = null;
if (servletRequest instanceof HttpServletRequest) {
request = new CustomHttpServletRequestWrapper((HttpServletRequest) servletRequest);
}
if (request == null) {
(servletRequest, servletResponse);
} else {
(request, servletResponse);
}
}
@Override
public void destroy() {}
}
package ;
import ;
import ;
import ;
import ;
/**
* Description: 过滤器配置
*
* @version 1.0 @ClassName FilterConfiguration @Author xulei
* @date 2021/3/3 16:51
*/
@Configuration
public class FilterConfiguration {
@Bean
FilterRegistrationBean<WebFilter> myFilterFilterRegistrationBean() {
FilterRegistrationBean<WebFilter> bean = new FilterRegistrationBean<>();
(new WebFilter());
(-1);
(("/*"));
return bean;
}
}
4.重写mvc放过静态资源
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
private final Logger logger = ();
@Autowired private RequestInterceptor requestInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
("############进入请求拦截器##########");
registry
.addInterceptor(requestInterceptor)
.addPathPatterns("/**")
.excludePathPatterns("/swagger-resources/**", "/**.html");
}
}