SpringSecurity 集成 JWT 报错 Access is denied 不允许访问
1、具体业务场景及报错信息
在给 接口 做访问控制时 使用(这里已经开启了开启基于方法的安全认证机制 @EnableGlobalMethodSecurity(prePostEnabled = true))
@PreAuthorize("hasAuthority('sys:role:perm')")
无效 ,前端页面访问 报错
2、问题排查
1、怀疑没往UserDetail里面塞值,打印确实有塞
2022-05-04 15:54:59.737 INFO 17844 --- [nio-8081-exec-1] c.m.sercurity.UserDetailServiceImpl : 权限信息为---->[ROLE_admin, ROLE_normal, sys:manage, sys:user:list, sys:role:list, sys:menu:list, sys:tools, sys:role:save, sys:user:save, sys:user:update, sys:user:delete, sys:user:role, sys:user:repass, sys:role:update, sys:role:delete, sys:role:perm, sys:menu:save, sys:menu:update, sys:menu:delete, sys:dict:logs]
2、怀疑当前用户没有权限
在要拦截的url上去掉相关校验后,获取当前用户的权限信息
System.out.println(SecurityContextHolder.getContext().getAuthentication());
发现确实没有值
排查发现解析jwt token 的时候 没有将 权限信息塞进去,直接传的null
3、解决方案:查出当前用户的权限及其角色信息 ,将值塞进去
4、开启接口权限校验并且验证
正常访问
且有用户角色权限 相关信息
SUCCESS!!!!!!!!
本文作者:KwFruit
本文链接:https://www.cnblogs.com/mangoubiubiu/p/16222878.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
分类:
疑难杂症
, Spring Security
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步