1

我正在使用 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

4 回答 4

5

你有别的东西吗

    grails.plugins.springsecurity.securityConfigType = "Annotation"

在配置文件中?

于 2012-05-05T07:30:23.070 回答
5

@Secured注释接受角色列表(String[]),我猜你在将字符串转换为字符串数组时遇到问题。

你可以试试@Secured(["ROLE_USER"])吗?

于 2012-05-04T11:52:42.360 回答
0

我找到了适合我的情况的解决方案。确保在grails.plugins.springsecurity列表中有 filterInvocationInterceptor。Config.groovy 中的filterNames如示例中所示:

grails.plugins.springsecurity.filterChain.filterNames = [
   'securityContextPersistenceFilter', 'logoutFilter',
   'authenticationProcessingFilter', 'myCustomProcessingFilter',
   'rememberMeAuthenticationFilter', 'anonymousAuthenticationFilter',
   'exceptionTranslationFilter', 'filterInvocationInterceptor'
]
于 2012-08-17T14:02:04.173 回答
-3

我认为@secured注释仅适用于控制器内部的方法,不适用于类。

尝试像这样使用它:

import grails.plugins.springsecurity.Secured

class SettingsController extends UtilController {
  @Secured(["ROLE_USER"])
  def index(){
    render "should not run while not logged in"
  }
}
于 2012-05-05T04:35:38.917 回答