前端向后端提交密码等敏感信息时先做编码再提交
后端有处理密码的加密算法,仅仅在前端处理和后端filter层处理,不改变原有的加密的逻辑(场景比较特殊)
解决方案
- 在配置文件配置需要加密解密的url和parameter
- 自定义filter,拦截到需要解密的url,dofilter
- 定义HttpRequestWrapper,处理解密
- filterChain(HttpRequestWrapper, response);
参考文档
https://stackoverflow.com/questions/681263/modify-httpservletrequest-body
踩的坑
- @RequestParam 和 @RequestBody 区别,以及HttpRequestWrapper分别需要@Override的方法
- @RequestParam :@getParameter @getParameterValues @getParameterMap
- @RequestBody : @getReader @getInputStream
-
spring security自定义filter重复执行问题
需要修改的点
- 配置文件配置属性的分隔符 (url 之间用分号间隔,param之间用逗号间隔)
- url 和 url/ 的匹配 (检测最后为/,直接删除)
- ……
延伸和适配性
- 加密和机密算法的可配置
代码暂时没有,我把相关的代码提取出来会放到这里
https://github.com/yemaozi5518/SpringBootEncryption/blob/master/README.md