3

由于一些外部原因(web.xml 中定义的一些过滤器仅适用于某些路径),我需要实现以下(简化)场景:

  • /路径不需要身份验证并重定向到“/secured”
  • /secured需要身份验证
  • /public1, /public2, 等不需要身份验证
  • 其他所有内容 ( /**) 都需要身份验证

为了实现这一点,有一个filterChain定义在Config.groovy

grails.plugins.springsecurity.filterChain.filterNames = [..., 'myAuthenticationFilter']
grails.plugins.springsecurity.filterChain.chainMap = [
  '/': 'JOINED_FILTERS,-myAuthenticationFilter',
  '/public1/**': 'JOINED_FILTERS,-myAuthenticationFilter',
  '/public2/**': 'JOINED_FILTERS,-myAuthenticationFilter',
  '/**': 'JOINED_FILTERS'
]

但是,匹配/路径存在问题。我试过'/'''。我可以将此路径与 匹配'/*',但它匹配更多的 URL,这不是我需要的。

我不能要求用户在访问时进行身份验证/,因为在所有情况下都必须进行重定向/secured,并且身份验证要求是,比如说,“外部提供”仅适用于/secured和其他一些路径。

有什么好的方法可以实现这种行为吗?

我正在使用带有 Spring Security Core 插件的 Grails 2.0.4。

4

2 回答 2

1

在 Grails 中有更简单的方法来定义这些规则。您可以使用interceptUrlMap或requestmap。

例如,您可以在 Config.groovy 中定义您的安全配置:

grails.plugins.springsecurity.interceptUrlMap = [
   '/secured/**':    ['ROLE_ADMIN','IS_AUTHENTICATED_FULLY'],
   '/public1/**':   ['IS_AUTHENTICATED_ANONYMOUSLY'],
   '/public2/**':   ['IS_AUTHENTICATED_ANONYMOUSLY'],
   '/js/**':        ['IS_AUTHENTICATED_ANONYMOUSLY'],
   '/css/**':       ['IS_AUTHENTICATED_ANONYMOUSLY'],
   '/images/**':    ['IS_AUTHENTICATED_ANONYMOUSLY'],
   '/login/**':     ['IS_AUTHENTICATED_ANONYMOUSLY'],
   '/logout/**':    ['IS_AUTHENTICATED_ANONYMOUSLY'],
   '/':            ['IS_AUTHENTICATED_ANONYMOUSLY'],
   '/**':            ['IS_AUTHENTICATED_FULLY']          //put this as the last item
]
grails.plugins.springsecurity.successHandler.defaultTargetUrl = "/secured"   //redirect `/` access to `/secured`
于 2012-12-26T03:43:11.673 回答
0

您可以使用 URLMapping 将特定控制器和操作与/URL 相关联吗?然后,您可以保护除特定控制器/操作对之外的所有内容。

于 2012-12-25T17:40:25.480 回答