我已经向relative question询问了hasAuthority()和hasRole()和this part is clear。
我尝试使用group authorities配置我的应用程序。如果我使用指令.hasAuthority(“ ADMIN”),配置对我有用
http
.antMatcher("/monitor/console/**")
.authorizeRequests()
.antMatchers("/monitor/console/**")
.hasAuthority("ADMIN")
.... // other unimportant java code..
但是,如果我将其更改为.hasRole(“ ADMIN”)或.hasRole(“ ROLE_ADMIN”),限制将不起作用。我可以检查JdbcDaoImpl服务在登录时加载的用户详细信息,并且可以看到附加的权限列表,但我不知道为什么hasRole(..)无法正常工作。我希望有人知道我需要在哪里使用断点来检查对象状态并比较结果或如何对其进行修复。
我真的很困惑,因为当我使用单个权限表时,限制无法正常工作...
最佳答案
在Spring中,角色与授权相同。在Spring Security 4之前,它们的处理方式相同。方法hasAuthority()刚刚在内部调用了hasRole()方法。
现在,在Spring Security 4中,方法hasRole()在角色名称中添加了前缀ROLE_,因此hasAuthority('ROLE_ADMIN')与hasRole('ADMIN')相同,因为ROLE_前缀是自动添加的。
您可以在这里看到更多。 http://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-jc.html#m3to4-role-prefixing
就您而言,我认为您在加载角色时需要在数据库中的角色中添加前缀ROLE_。