项目:springboot+springSercurity+redis
问题类型:token
时间:2024.6.11
token:
1.根据用户名和id生成
2.根据id生成
3.根据用户名生成
4.其他(根据项目其他需求或功能在定义)
使用情况:
在以往的项目中,我是使用的<<1.根据用户id和用户名生成token>>
发现问题:
当我修改用户名之后,
1.刷新页面会回到登录界面,并弹出提示信息:执行了全局异常,后端报错:java.lang.NullPointerException
2.不刷新进行其他操作均可,操作日志中记录的操作人为修改前用户。
使用开发人员工具进行网络监控:刷新页面会重新发送请求获取用户信息
查看代码,寻找原因:
1.查看安全框架配置类:无关
2.查看安全框架配置类中配置的用户认证过滤器:
原因a:通过用户名存储了用户的权限信息
原因b:将通过用户id和用户名生成的token响应给了前端
3.查看安全框架配置类中配置的拦截过滤器:
原因c:获取请求头中的token并解析出用户名,然后根据用户名获取权限
4.查看获取用户信息方法:
原因d:传参request,从中获取token并解析用户名,根据用户名获取用户信息,解析到的用户名为修改前的用户名,数据库中无此用户名,空指针异常
解决方案:
1.使用id生成token,并通过id存储用户权限
2.仍使用用户名生成token,每次修改用户名重新存储权限,并生成新token响应前端