悟已往之不谏,知来者之可追
一周小结: 2022-8-15 ~ 2022-8-21
三省吾身
回顾上周的工作学习内容
工作任务
近期没有明确的项目开发任务,主要是平台的数据安全问题处理;
问题描述:大部分接口的请求参数类似当前登录的用户名 username,user_id,工号都是通过前端传递的(无力吐槽,不知道为什么会这么设计),后端也只是校验了 JWT-Token 自身的有效性,没有校验 token 和用户信息的一致性,所以存在接口数据越权的问题。
修复方案大致有三种:
- 接口全部重构,不再使用前端的共通参数,接口通过
SecurityUtils.getSubject().getPrincipal()相关的方法获取当前用户信息 - 每个项目增加 AOP 拦截处理,校验接口参数和 Token 信息的一致性
- 所有项目的共通依赖修改,通过拦截器校验接口参数和 Token 信息的一致性
最终确定的方案为,遗留系统采用第三种方式,同时支持配置开关,可选择性开启; 新的系统使用第一种,并完善相关的共通方法或者工具类。
在实际修改的过程中,还是遇到了很多问题,比如
- 请求流只能读取一次,所以拦截器读取之后,SprinMVC 就会报错
- 为什么请求流只能读取一次呢?
- 按照网上提供的一些方案修改之后,并没有生效,根本原因是什么
- ...
相关的问题准备梳理之后单独输出一篇完整的文档,这里先贴一下参考文档:
- 纯英文,但是讲的还是很清晰的
www.jvt.me/posts/2020/… - juejin.cn/post/685864…
学习内容
学习方面,学习了一些设计模式,策略模式、责任链、代理+动态代理等。
不断巩固复习,并在工作中实践。
Next Week
有一个项目历时近一年下周终于要上线了,而且是入职后参与的第一个项目,也算是倾注了颇多心血,做好上线前的各种工作以及通宵的准备吧[doge];