问题描述:一个页面设有权限,只能是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_前缀的原因