使用 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.gsp
、page1.gsp
和 page2.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:用户登录后如何分配角色?