Grails Spring安全静态规则

时间:2014-12-08 05:38:27

标签: spring grails spring-security

我希望在访问我的应用程序之前对所有用户进行身份验证。以下是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并引发错误:页面未正确重定向。你能告诉我在这里犯了什么错误吗?

3 个答案:

答案 0 :(得分:4)

首先,您必须说明弹簧安全性将使用哪种类型的映射。

grails.plugins.springsecurity.securityConfigType = 'InterceptUrlMap'

第二个'permitAll'已更改为'IS_AUTHENTICATED_ANONYMOUSLY' 而对于第三,如果春季安全找到/**他在这条线下没有看到另一个。所以你的代码必须是这样的:

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

答案 1 :(得分:2)

TrongBang和Koloritnij走在正确的轨道上。但是在你的问题中,它们并不完全正确。他们建议您切换到其他身份验证设置。 (哪种方法有效但在设置环境中无法解决问题。)

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

  

'/ springSecurityOAuth / **':['permitAll']

插件映射控制器路径,但静态规则仍然解释控制器和方法。 这需要一些挖掘才能找到这个。我有同样的问题,我在博客上写了这篇文章(它包含了一些关于Spring Security Oauth插件如何工作的细节。

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

答案 2 :(得分:0)

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"]
]