使用Spring Security向Grails添加自定义角色前缀

时间:2014-02-19 07:35:56

标签: grails groovy spring-security

我正在构建一个需要一些以FN_而不是ROLE_开头的角色/权限的应用程序(Grails Spring Security插件2.0默认只接受ROLE_前缀的权限名称)。

我在grails-app / conf / spring / resources.groovy中为此前缀注册了一个角色投票人,如下所示:

  limesPermissionVoter(org.springframework.security.access.vote.RoleVoter) {
    rolePrefix = 'FN'
  }

我在Config.groovy中定制了选民名单:

grails {
  plugin {
    springsecurity {
      voterNames = [
        'authenticatedVoter', 
        'roleVoter', 
        'limesPermissionVoter',
        'webExpressionVoter'
      ]
...

据我了解,这应该足以使用我的前缀权限作为注释(如FN_FUNCTION1)来工作。

然而,当我注释一个控制器(@Secured ['FN_FUNCTION1'])时,我在WebExpressionRoot jut上得到一个SpelEvaluationException,就像没有自定义选民一样。

如果我从resources.groovy中删除了bean定义,那么新的选民列表似乎已经处理了。

我在这里缺少什么?

其中一个主要问题似乎是我的FN权限字符串被解析为SpelExpresssions,因此webExpressionVoter想要对它们进行投票。如何将我的FN属性解析为webExpressionVoter弃用的正确ConfigAttributes?

如果我使用“hasRole('FN_FUNCTION1')”代替“FN_FUNCTION1”,一切正常(正如预期的那样,因为这是一个正确的EL表达式)但是如果我不需要为像这样的简单检查。 (注意:如果我使用表达式,我可以完全从配置中省略limesPermissionVoter,因为在这种情况下我们可以允许webExpressionVoter对这些配置属性进行投票)

0 个答案:

没有答案