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方法查看源码

再点进去:
Spring Security基于数据库认证遇到的一个小问题_第1张图片
这就是为什么admin前面会都一个ROLE_前缀的原因

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

你可能感兴趣的:(springboot)