拦截验证
1. 注意如果request里面的流,被读取了一次,后面的controller层将无法读取数据。
处理方法:将 request 封装到 SignatureRequestWrapper (继承自 HttpServletRequestWrapper) 中,从 SignatureRequestWrapper 获取流数据(getInputStream())
2. Filter 无法直接通过 @Value 注入properties属性 ,可以通过 DelegatingFilterProxy 来处理,将Filter 交给spring来管理。具体代码:
SignatureFilter:
@Component("signature") public class SignatureFilter implements Filter { private Logger logger = LoggerFactory.getLogger(SignatureFilter.class); @Value("${rsaKey}") private String rsaKey; …… }
web.xml 配置:
<filter> <filter-name>signature</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>signature</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
3. 通过 ContentType (request.getContentType()) 判断数据类型 (例如:application/json , application/x-www-form-urlencoded) 来决定对流的处理方式
4. 验证规则:先对参数key值进行排序,按顺序拼接字符串,然后加上 验证码 ,对整个字符串进行加密
参见:http://www.cnblogs.com/Jtianlin/p/7922732.html
5.