将Spring Security应用于插件

时间:2013-10-22 10:28:06

标签: grails spring-security grails-plugin

我正在开发一个插件来提供一些特定的功能。插件“拥有一切”:完整的垂直切片(服务,控制器,域类,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。安装到主应用程序后,安全插件将自动选择它们。

1 个答案:

答案 0 :(得分:2)

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

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

查看official docs,向下滚动到 controllerAnnotations.staticRules 部分。