Grails使用spring安全注释和UrlMapping保护控制器

Grails使用spring安全注释和UrlMapping保护控制器,grails,spring-security,Grails,Spring Security,我正在尝试保护控制器: @Secured(['ROLE_ADMIN']) class FooBarController { } 我在UrlMappings中映射了控制器: "/foo/bar" 似乎当我尝试以/foo/bar的身份访问控制器时,注释实际上被忽略了 我看到一些东西说我需要使用controllernotations.staticRules。我的第一个问题是: 我是否需要复制静态规则中的所有规则,或者说它是安全的,并且过滤器将从注释中拾取特定规则就足够了 我有另一个场景,我用Ur

我正在尝试保护控制器:

@Secured(['ROLE_ADMIN'])
class FooBarController {

}
我在UrlMappings中映射了控制器:

"/foo/bar"
似乎当我尝试以
/foo/bar
的身份访问控制器时,注释实际上被忽略了

我看到一些东西说我需要使用
controllernotations.staticRules
。我的第一个问题是:

  • 我是否需要复制静态规则中的所有规则,或者说它是安全的,并且过滤器将从注释中拾取特定规则就足够了
  • 我有另一个场景,我用UrlMappings保护一个控制器,默认的URL路径被更改,但控制器名称没有更改,例如

    @Secured(['ROLE_ADMIN'])
    MyApiController {
    
    }
    
    URL映射为:
    /api/company/1/myApi


    在这种情况下,在staticRules中拾取注释时没有进行任何必要的配置,因此我对在何处以及在何种情况下需要配置什么感到非常困惑。

    这里的问题似乎是UrlMapping与默认的控制器映射约定不匹配。i、 e.Config.groovy映射指的是UrlMapping,而不是实际的控制器名称

    请参阅以下答案:以获得更全面的解释


    依我看,这是不直观的,但这是它目前的工作方式。请注意,如果使用InterceptUrlMap样式的配置,它不会以这种方式工作。如果您使用InterceptorUrlMap样式,那么您可以参考UrlMappings.groovy的URL映射。

    我认为您不能/不应该混合使用不同的方法来保护控制器/操作。这可能是您遇到这些问题的原因。