记录每一个努力的日子!
上一篇:制作一个html转pdf的spring boot starter
参考项目:github 1.3.0分支 order模块
1、原理
spring 处理请求的流程是 …->filter->…->controller,所以在未到达controller之前替换掉请求参数即可
2、添加Filter
自定义一个Filter类实现Filter接口,重写doFilter方法,添加一个FilterRegistrationBean到容器中即可
@Bean
public FilterRegistrationBean coverFilter() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new SubscribeRequestBodyCoverFilter());
registration.addUrlPatterns("/openapi/*");
registration.setOrder(2);
return registration;
}
3、改变request请求报文
因为HttpServletRequest的流只允许读取一次,所以使用HttpServletRequestWrapper包装类读取到变量中以便读取和改变(示例中使用的@RequestBody 获取参数是调用getInputStream 方法,所以只重写了getInputStream方法。其他获取方式可类似重写对应的获取方法)
4、改变response返回报文
同上
5、加解密
使用AES完成对称加解密
6、签名
使用body内容+时间戳盐计算MD5值完成签名