有没有办法在 Spring Security 插件的属性文件中定义角色而不是硬编码它们?

Posted

技术标签:

【中文标题】有没有办法在 Spring Security 插件的属性文件中定义角色而不是硬编码它们?【英文标题】:Is there a way to define roles in properties file for Spring Security plugin rather than hard coding them? 【发布时间】:2015-02-05 14:43:13 【问题描述】:

我正在使用 LDAP 插件和 Spring Security 插件。 LDAP 插件获取登录用户所属的组。我的应用程序有两个角色adminnormal。而不是硬编码角色,我想通过属性文件使它们可配置。这样,而不是写

@Secured(["ROLE_ADMINS"])

我可以写类似的东西

@Secured(["role.admins"])

role.admins=ROLE_ADMINS 在配置文件中的位置。

通过这种方式,我可以获取相同的 WAR 文件并将其部署在多个客户端上,每个客户端都有自己在 ActiveDirectory 中配置组名的标准化方法。

【问题讨论】:

【参考方案1】:

你可以让它工作,但我认为有更好的选择。注解目前有点死板,只支持ROLE_开头的角色,IS_AUTHENTICATED_FULLYIS_AUTHENTICATED_REMEMBEREDIS_AUTHENTICATED_ANONYMOUSLY这3个特殊标记,以及SpEL表达式。但是您可以从 SpEL 表达式中调用 Spring bean,因此您应该考虑调用服务中的方法并在那里完成工作;语法将使用 @ 符号:

@Secured('@myService.doTheAdminChecks()')

并且该实现可以尽可能复杂,并且可以从Config.groovy 和/或属性文件中读取信息,但带注释的代码不会因安全问题而变得混乱。

另一种选择是在注解中使用闭包;这是一项新功能,在@Secured part of the What's New section 中有描述。

【讨论】:

我喜欢能够让管理员在服务中检查自己的选项。这也适用于sec 标签吗?即<sec:ifAnyGranted roles="ROLE_X, ROLE_Y">

以上是关于有没有办法在 Spring Security 插件的属性文件中定义角色而不是硬编码它们?的主要内容,如果未能解决你的问题,请参考以下文章

在没有插件 web.xml 问题的情况下配置 Spring Security

grails-spring-security-rest 插件和悲观锁定

有没有办法在同一个项目中同时使用 auth0-spring-security-api 和 java-jwt?

Grails 通过 Spring Security 插件使用 Google 身份验证

如何处理 grails spring-security-rest 插件中的自定义身份验证异常?

Grails Spring Security 插件 - 修改登录用户的权限