Grails Spring Security 静态规则

Posted

技术标签:

【中文标题】Grails Spring Security 静态规则【英文标题】:Grails Spring Security Static Rules 【发布时间】:2015-02-05 18:09:41 【问题描述】:

我希望所有用户在访问我的应用程序之前都经过身份验证。以下是 Config.groovy 中的设置:

grails.plugin.springsecurity.controllerAnnotations.staticRules=[
    "/**": ["ROLE_ADMIN"],
    "/login/auth": ["permitAll"]
]

我放 "/login/auth": ["permitAll"] 的原因是任何用户都有机会登录并通过身份验证。但是,当我访问 http://localhost:8080/myapp/ 时,它会重定向到 http://localhost:8080/myapp/login/auth 并引发错误:页面未正确重定向。你能告诉我在这里犯了什么错误吗?

【问题讨论】:

看看@monksy 的reply - 如果你想使用 Secured 注释,我认为这是正确的解决方案。 【参考方案1】:

首先你必须告诉 spring security 你将使用什么类型的映射。

grails.plugins.springsecurity.securityConfigType = 'InterceptUrlMap'

第二个'permitAll'改为'IS_AUTHENTICATED_ANONYMOUSLY' 第三,如果 spring security 找到/** 他没有在这条线下看到另一个。所以你的代码一定是这样的:

grails.plugins.springsecurity.securityConfigType = SecurityConfigType.InterceptUrlMap
grails.plugins.springsecurity.interceptUrlMap = [
"/login/auth": ["permitAll"],
 "/**": ["ROLE_ADMIN"]
]

【讨论】:

非常感谢。这是解决方案。但是,在使用 SecurityConfigType.InterceptUrlMap 时出现以下错误:错误:“securityConfigType”属性必须是“Annotation”、“Requestmap”或“InterceptUrlMap”之一,或者未指定默认为“Annotation”;将值设置为“注释”。因此,我已将其更改为“InterceptUrlMap”并且它起作用了。 @TrongBang 设置我的答案已回答 :) 他使用 IntercepUrlMap 安全类型并不是绝对必要的。您的方法确实有效,但仍然可以使用注释。 在他的问题中,他想使用 InterceptUrlMapping。【参考方案2】:

Koloritnij 的解决方案是正确的。但是,在使用 SecurityConfigType.InterceptUrlMap 时会抛出以下错误:

ERROR: the 'securityConfigType' property must be one of
'Annotation', 'Requestmap', or 'InterceptUrlMap' or left unspecified
to default to 'Annotation'; setting value to 'Annotation'

我已将其更改为仅“InterceptUrlMap”并且它有效:

grails.plugins.springsecurity.securityConfigType = 'InterceptUrlMap'
grails.plugins.springsecurity.interceptUrlMap = [
    "/login/auth": ["permitAll"],
    "/**": ["ROLE_ADMIN"]
]

【讨论】:

【参考方案3】:

TrongBang 和 Koloritnij 走在正确的轨道上。但是在您的问题的背景下,它们并不完全正确。他们建议您切换到不同的身份验证设置。 (这会起作用,但它不能解决您的设置环境中的问题。)

如果您希望保留注释,则必须调用 OAuth 使用的控制器。

‘/springSecurityOAuth/**’: [‘permitAll’]

插件映射该控制器路径,但静态规则仍会从中解释控制器和方法。 我花了一些时间才发现这一点。我遇到了同样的问题,我在博客中对此进行了讨论(其中包含有关 Spring Security Oauth 插件如何工作的一些详细信息。

http://theexceptioncatcher.com/blog/2015/04/spring-security-oauth-the-missing-instructions/

【讨论】:

以上是关于Grails Spring Security 静态规则的主要内容,如果未能解决你的问题,请参考以下文章

通过 Spring Security 配置 Grails 配置插件 grails-ckeditor

Grails - 卸载 Spring Security Core

Grails - grails-spring-security-rest - 无法从 application.yml 加载 jwt 机密

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

Grails + spring-security-core:用户登录后如何分配角色?

Grails Spring Security注释问题