以编程方式访问/检查 Spring Security 分层角色

发布于 2025-01-08 20:21:28 字数 616 浏览 0 评论 0原文

在我的 Grails 项目中,我定义了多个 使用 Spring Security 插件的分层角色,例如 ROLE_USER > SOME_OTHER_ROLE。当使用 @Secured 注释保护控制器方法时,它工作得很好。但是,我还想在我的代码中以编程方式检查一个用例的角色。使用以下方法,即使用户通过分层角色定义继承角色,我总是得到 false

request.isUserInRole('SOME_OTHER_ROLE')

此外,以下调用永远不会直接返回继承的角色:

SecurityContextHolder.context?.authentication?.authorities
springSecurityService.getPrincipal().getAuthorities()

是否有一种方法来检查用户是否也有继承的角色?

In my Grails project I defined multiple hierarchical roles using the Spring Security plugin e.g. ROLE_USER > SOME_OTHER_ROLE. When securing controller methods using the @Secured annotation it works just fine. However, I also would like to check the role programmatically in my code for one use case. Using the following approach I always get a false even though the user inherits the role through hierarchical role definition:

request.isUserInRole('SOME_OTHER_ROLE')

Also the following calls never directly return the inherited roles:

SecurityContextHolder.context?.authentication?.authorities
springSecurityService.getPrincipal().getAuthorities()

Is there a way of checking if the user also has the inherited role?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

千寻… 2025-01-15 20:21:28

这似乎是 SecurityContextHolderAwareRequestWrapper 中的一个错误(或者至少是一个遗漏),它添加了一个请求包装器来实现 isUserInRole 方法。

您可以使用 roleVoter bean 的 extractAuthorities 方法。为其添加依赖注入 (def roleVoter),然后调用

def allRoles = roleVoter.extractAuthorities(
        SecurityContextHolder.context.authentication)

This seems like a bug (or at least an omission) in SecurityContextHolderAwareRequestWrapper which adds a request wrapper to implement the isUserInRole method.

You can use the roleVoter bean's extractAuthorities method. Add a dependency injection for it (def roleVoter) and then call

def allRoles = roleVoter.extractAuthorities(
        SecurityContextHolder.context.authentication)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文