Spring Security基于数据库认证遇到的一个小问题

问题描述:一个页面设有权限,只能是admin访问,数据库中有一条记录,包含username,password,role角色,当时将数据库的role角色置为admin…在输入账号和密码后登录验证是一直说没有权限,禁止访问?

重点(必看):在配置configure中的hasRole(“admin”)设置权限时,在程序执行的过程中会变成hasRole(“ROLE_admin”),也就是说数据库中的获取的角色admin与ROLE_admin比较,肯定不会验证通过,所以会导致一直没有权限

答案:在项目中使用Ctrl+N找到DefaultFilterInvocationSecurityMetadataSource类,其中有一个getAttributes方法,里面有一个requestMap,在这打一个断点,再用debug调试,在查看当时设置的权限hasRole(“admin”)会自动变成hasRole(“ROLE_admin”)

结果
源码:
点进hasRole方法查看源码

再点进去:

这就是为什么admin前面会都一个ROLE_前缀的原因

这里只涉及到spring security一小部分问题,其中程序代码没有粘贴出来,我们应该能搭建自己的测试模板,这里只是描述了遇到的一个难以解决问题,比如还有常见的bad credentials问题(加密问题)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值