我正在使用Grails 2.0.3和最新的Spring Security插件来保护我的控制器。
但不知何故,控制器并不安全。
import grails.plugins.springsecurity.Secured
@Secured("ROLE_USER")
class SettingsController extends UtilController {
def index(){
render "should not run while not logged in"
}
}
当我和我没有登录时,我看到了这条消息。如果我注入springSecurityService,它会显示正确的登录状态(true / false),因此注释不会被处理。
我尝试添加“IS_AUTHENTICATED_FULLY”要求并将注释移到方法中,但这没有帮助。
它与什么有关?
答案 0 :(得分:5)
@Secured
注释接受角色列表(String[]
),我猜你将字符串转换为字符串数组有问题。
您可以尝试使用@Secured(["ROLE_USER"])
吗?
答案 1 :(得分:5)
你有什么不是
grails.plugins.springsecurity.securityConfigType = "Annotation"
在配置文件中?
答案 2 :(得分:0)
我找到了解决方案。确保在Config.groovy中的grails.plugins.springsecurity。 filterNames 列表中包含 filterInvocationInterceptor ,如下例所示:
grails.plugins.springsecurity.filterChain.filterNames = [
'securityContextPersistenceFilter', 'logoutFilter',
'authenticationProcessingFilter', 'myCustomProcessingFilter',
'rememberMeAuthenticationFilter', 'anonymousAuthenticationFilter',
'exceptionTranslationFilter', 'filterInvocationInterceptor'
]
答案 3 :(得分:-3)
我认为@secured
注释仅适用于控制器内部的方法而不适用于类。
尝试使用它:
import grails.plugins.springsecurity.Secured
class SettingsController extends UtilController {
@Secured(["ROLE_USER"])
def index(){
render "should not run while not logged in"
}
}