3

我正在开发一个插件来提供一些特定的功能。该插件“拥有一切”:完整的垂直切片(服务、控制器、域类、GSP)。在插件级别上不使用安全性。

现在我想将插件集成到主应用程序中,并应用一些安全规则,如@Secured(['ROLE_SUPER']).

我现在这样做的方式并不太优雅:

@Secured(['ROLE_SUPER'])
class SomeController extends SomePluginController {}

这种零值代码的数量随着控制器的数量而增长。

这里有什么可以改进的?

TIA

更新:grails.plugin.springsecurity.controllerAnnotations.staticRules地图不起作用。

我有一个带有 TaskController 和 index-action 的插件 AggregationPlugin 。

我试着这样说:

  grails.plugin.springsecurity.controllerAnnotations.staticRules = [
    '/task/**': ['ROLE_SUPER'],
    '/aggregation/**': ['ROLE_SUPER'],
    '/plugins/aggregation-0.1/**': ['ROLE_SUPER'],
  ]

但我仍然可以匿名访问该页面。

我正在使用Grails 1.3.7spring-security-core 1.2.7.2

更新#2:

所以,经过一些尝试,我找到了最优雅的解决方案。如果你有很多插件要应用安全性,我在插件中添加了一个依赖项,而不是在我的设置中由于某种原因不起作用并且可能变得非常大的 staticRules:

compile( 'org.springframework.security:spring-security-core:3.0.7.RELEASE' )

这样我@Secured现在就可以在没有整个安全插件的情况下在我的控制器中使用它。安装到主应用程序后,安全插件将自动选择它们。

4

1 回答 1

2

您可以将插件控制器的配置放在Config.groovy

grails.plugins.springsecurity.controllerAnnotations.staticRules = [
         '/somePlugin/': ['ROLE_SUPER']
]

查看官方文档,向下滚动到部分controllerAnnotations.staticRules

于 2013-10-22T11:04:06.700 回答