有没有办法在 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 插件获取登录用户所属的组。我的应用程序有两个角色admin
和normal
。而不是硬编码角色,我想通过属性文件使它们可配置。这样,而不是写
@Secured(["ROLE_ADMINS"])
我可以写类似的东西
@Secured(["role.admins"])
role.admins=ROLE_ADMINS
在配置文件中的位置。
通过这种方式,我可以获取相同的 WAR 文件并将其部署在多个客户端上,每个客户端都有自己在 ActiveDirectory 中配置组名的标准化方法。
【问题讨论】:
【参考方案1】:你可以让它工作,但我认为有更好的选择。注解目前有点死板,只支持ROLE_
开头的角色,IS_AUTHENTICATED_FULLY
、IS_AUTHENTICATED_REMEMBERED
或IS_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 身份验证