为什么在Grails Spring Security中@Secured会被忽略?

时间:2012-05-04 11:34:04

标签: grails spring-security

我正在使用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”要求并将注释移到方法中,但这没有帮助。

它与什么有关?

4 个答案:

答案 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"
  }
}