一:问题
1. 前端传给后端的是一个加密字符串,后端controller层login接口怎么就直接解密了呢?
2. 中间经过什么步骤到达的登录接口呢?
二:个人分析
首先考虑的是拦截器、过滤器、切面AOP;
1. 使用全文搜索没有使用到AOP切面技术(可以使用前置通知进行搜索)
2. 去找拦截器(Interceptor),发现web的调用时间统计拦截器中对登录验证码、请求方式、请求路径进行了一些处理
还是没有看见对登录进行处理,没有解密
3. 考虑过滤器,全局搜索过滤器,可以找到 CryptoFilter 类,CryptoFilter类实现了Filter接口,发现这个类中的foFilter方法中对登录的数据进行解密,没错就是这个过滤器对前端加密的字符串进行了处理
三:解密流程逐步解析
1. 找到application.yml文件中有对数据权限以及接口权限加解密的配置
2. 根据接口权限标识去找对应的代码,操作:按住 Ctrl 鼠标点击headerFlag进去,会进入ApiDecryptProperties配置属性类;按住 Ctrl 继续点击类名ApiDecryptProperties,会出现有两个类引用到了配置属性类
3. 注意看我图中的流程,过滤器直接交给了Spring进行管理处理接口数据的加解密,总的流程就是前端——>Filter过滤器——>Interceptor拦截器——>Controller层
4. 后续的login流程大家通过Debug一步一步走就是了