Grails Spring-Security 插件保护所有控制器,而不仅仅是带有注释@Secured控制器



我正在按照教程使用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注释的存在决定,但这仅定义了具有控制器权限的角色。

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

。 然后是任何没有请求映射的 URL(注释、条目) in controllerAnnotations.staticRules 或 interceptUrlMap,或 请求映射实例)将拒绝所有用户。

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

相关内容

  • 没有找到相关文章

最新更新