我正在按照教程使用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
。