我正在关注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注释的存在,但只定义了具有控制器权限的角色。
答案 0 :(得分:2)
根据Spring安全核心插件的documentation,默认行为是pessimistic lockdown
...然后任何没有请求映射的URL(注释,条目 在controllerAnnotations.staticRules或interceptUrlMap中,或者 将拒绝所有用户使用Requestmap实例。
我强烈建议您阅读文档的特定部分,了解如何配置插件供您使用。通常,这将修改rejectIfNoRule
的默认值并配置相应的staticRules
。