grails spring-security 插件保护所有控制器,而不仅仅是带有@Secured注解的控制器
Posted
技术标签:
【中文标题】grails spring-security 插件保护所有控制器,而不仅仅是带有@Secured注解的控制器【英文标题】:grails spring-security plugin secures all controllers instead of just ones with @Secured annotation 【发布时间】:2015-01-28 18:50:11 【问题描述】:我正在关注tutorials 使用springsecurity 身份验证插件。我正在使用 grails 版本 2.3.8 和 spring-security-core:2.0-RC2。它按预期工作,使用 Secured 注释创建 HelloWorld 控制器:
package basicauthdemo
import grails.plugin.springsecurity.annotation.Secured
class HelloController
@Secured(['ROLE_USER'])
def index()
render "Hello World"
然后显示登录屏幕。
我的问题是,当我创建另一个没有 @Secured 注释的控制器时。导航到该控制器时,我仍然会看到登录屏幕。 Spring security 现在负责对我的控制器的所有访问,正如我从生成的 web.xml 中的过滤器映射中看到的那样:
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>ERROR</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
如何告诉插件允许开放访问某些控制器而不是其他控制器?我认为这将由 @Secured 注释的存在来确定,但这仅定义了具有控制器权限的角色。
【问题讨论】:
【参考方案1】:根据 Spring Security Core 插件的documentation,默认行为是pessimistic lockdown
... 然后是任何没有请求映射的 URL(注释、条目 在controllerAnnotations.staticRules 或interceptUrlMap,或一个 Requestmap 实例)将被所有用户拒绝。
我强烈建议您阅读文档的特定部分,了解如何配置插件以供您使用。通常这将修改rejectIfNoRule
的默认值并配置适当的staticRules
。
【讨论】:
以上是关于grails spring-security 插件保护所有控制器,而不仅仅是带有@Secured注解的控制器的主要内容,如果未能解决你的问题,请参考以下文章
Spring-security/Grails 应用程序 - 未调用自定义 WebSecurity 配置
在 Grails 中使用 Pre/Post Spring-Security Annotations
休息资源的 Grails spring-security 静态规则似乎无法正常工作
Grails Spring Security 插件身份验证失败
Grails Spring-Security - 如何比较密码-
使用 spring-security-core 插件将 Facebook 登录 (oauth) 与现有 grails 应用程序集成