grails spring-security插件可以保护所有控制器,而不仅仅是使用@Secured注释的控制器

时间:2014-11-30 19:02:19

标签: grails spring-security

我正在关注tutorials以使用springsecurity身份验证插件。我使用的是grails版本2.3.8和spring-security-core:2.0-RC2。它按预期工作,使用安全注释创建HelloWorld控制器:

package basicauthdemo
import grails.plugin.springsecurity.annotation.Secured

class HelloController {
    @Secured(['ROLE_USER'])
    def index() {
    render "Hello World"
    }
}

然后会出现一个登录屏幕。

我的问题是,当我创建另一个没有@Secured注释的控制器时。导航到该控制器时,我仍然会看到登录屏幕。 Spring安全性现在负责对我的控制器的所有访问,正如我在生成的web.xml中的过滤器映射中看到的那样:

<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>ERROR</dispatcher>
    <dispatcher>REQUEST</dispatcher>
  </filter-mapping>

如何告诉插件允许开放访问某些控制器而不是其他控制器?我认为这将取决于@Secured注释的存在,但只定义了具有控制器权限的角色。

1 个答案:

答案 0 :(得分:2)

根据Spring安全核心插件的documentation,默认行为是pessimistic lockdown

  

...然后任何没有请求映射的URL(注释,条目   在controllerAnnotations.staticRules或interceptUrlMap中,或者   将拒绝所有用户使用Requestmap实例。

我强烈建议您阅读文档的特定部分,了解如何配置插件供您使用。通常,这将修改rejectIfNoRule的默认值并配置相应的staticRules