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 中国大陆许可协议进行许可。

posted @   KwFruit  阅读(1176)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起