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