使用 grails spring security core 插件保护 URL 映射

Posted

技术标签:

【中文标题】使用 grails spring security core 插件保护 URL 映射【英文标题】:Securing URL mapping with grails spring security core plugin 【发布时间】:2012-03-29 15:32:37 【问题描述】:

正如标题所说,我正在尝试使用 Spring 的安全核心来保护页面。考虑以下 URL 映射(假设存在 home.gsppage1.gsppage2.gsp):

"/"(view:'/home')
"/page1"(view:'/page1')
"/page2"(view:'/page2')

现在,考虑Config.groovy 中的以下设置:

grails.plugin.springsecurity.interceptUrlMap = [
    '/': ['IS_AUTHENTICATED_ANONYMOUSLY'],   
    '/**': ['IS_AUTHENTICATED_FULLY']        
]

如果我理解正确,我应该能够在没有任何安全措施的情况下访问主页,并且当我尝试访问 /page1/page2 时,我应该被定向到登录页面。不幸的是,情况似乎并非如此。我仍然可以直接访问 page1 和 page2(例如http://localhost:8080/MyGrailsProject/page1)。

但是,如果我尝试通过控制器的操作使用 @Secured 注释,安全性就会启动(即请求被重定向到登录页面)。我的配置似乎有什么问题?如何保护 URL 映射?

【问题讨论】:

您是否尝试在interceptUrlMap 中添加'/home/**': ['IS_AUTHENTICATED_ANONYMOUSLY']? 【参考方案1】:

你有:

grails.plugin.springsecurity.interceptUrlMap

应该是

grails.plugins.springsecurity.interceptUrlMap

注意插件上的 s。

【讨论】:

【参考方案2】:

这是使用注释的默认方法。但是如果你更喜欢使用 url map,你必须设置:

grails.plugins.springsecurity.securityConfigType = "InterceptUrlMap"

参见文档:http://grails-plugins.github.com/grails-spring-security-core/docs/manual/guide/single.html#5.2%20Simple%20Map%20in%20Config.groovy

【讨论】:

是的,我已经对Config.groovy进行了必要的配置,我仍然可以直接访问这些页面。实际上,我对使用控制器的想法很感兴趣,但我仍然喜欢将所有配置都放在一个文件中的想法(而不是将其作为注释嵌入到控制器的操作中)。【参考方案3】:

顺序很重要,您应该在顶部的interceptUrlMap 中设置最严格的一个。

【讨论】:

模式总是按照定义的顺序进行评估。因此,更具体的模式在列表中定义得比不太具体的模式更高,这一点很重要。这反映在我们上面的示例中,其中更具体的 /secure/super/ 模式看起来比不太具体的 /secure/ 模式更高。如果它们被反转,/secure/ 模式将始终匹配,而 /secure/super/ 模式将永远不会被评估。

以上是关于使用 grails spring security core 插件保护 URL 映射的主要内容,如果未能解决你的问题,请参考以下文章

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

使用 Spring Security Grails 插件编码密码

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

在 Grails 中使用 Pre/Post Spring-Security Annotations

Grails 3.0 和 Spring Security

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