java - Spring Security jdb通过组进行身份验证

标签 java spring-security spring-boot spring-java-config

我问过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_ 添加到数据库中的角色。

关于java - Spring Security jdb通过组进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38358639/

相关文章:

java - spring boot hibernate关系映射错误

java - 使用 Java 8 构造时创建 Bean 时出现 ArrayOutOfBoundsException

java - Bean 属性 'trustStore' 不可写或具有无效的 setter 方法。 setter 的参数类型与 getter 的返回类型是否匹配?

spring - 如何使用@WebfluxTest测试异常

java - 如何使用 JPA 从 1 自动生成 id?

java - 如何模拟类的每个实例

grails - spring-security-core:2.0-RC5给出错误

spring - <安全:custom-authentication-provider/> means?

java - Spring Boot多模块Maven项目@Autowired不工作

java - 如何在jME3中定位球体上的纹理?