Spring security jdbauthentication authority via groups
Posted
技术标签:
【中文标题】Spring security jdbauthentication authority via groups【英文标题】:Spring security jdbcauthentication authorities via groups 【发布时间】:2016-11-16 10:51:07 【问题描述】:我已经向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(..) 不起作用。我希望有人知道我需要在哪里使用断点来检查对象状态并比较结果或如何修复它。
我真的很困惑,因为当我使用单个 authorities 表时限制正常工作......
【问题讨论】:
【参考方案1】:在 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_ 添加到数据库中的角色中。
【讨论】:
我不明白你的意思,对不起。那么,如果我的 hasAuthority(...) 工作正常,但 hasRole(...) 已损坏,那是什么原因呢? 另外如果你相信ROLE_前缀规则,请注意以下两种情况: 1.我知道这个规则(见问题描述)。 2. 我得到了an old issue 但没有解决方案。我的角色前缀被“”覆盖。 重点是,方法 hasRole() 将前缀 ROLE_ 添加到角色名接收作为参数。您当前的权限是 ADMIN,因此当您调用 hasRole("ADMIN") 时,它会查找 ROLE_ADMIN,但它不存在(仅存在 ADMIN,不存在 ROLE_ADMIN),与您调用 hasRole("ROLE_ADMIN") 时相同。我认为您需要将权限名称更改为 ROLE_ADMIN 而不是 ADMIN,因此当您调用 hasRole("ADMIN") 时,它会查找 ROLE_ADMIN。以上是关于Spring security jdbauthentication authority via groups的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security:2.4 Getting Spring Security
没有 JSP 的 Spring Security /j_spring_security_check
Spring Security 登录错误:HTTP 状态 404 - /j_spring_security_check