Grails Spring Security插件 - 保护除根路径之外的所有内容

时间:2012-11-14 15:43:11

标签: spring grails spring-security

由于某些外部原因(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'
]

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

我无法要求用户在访问/时进行身份验证,因为必须在所有情况下都重定向到/secured,而且,例如,“外部提供”的身份验证要求仅适用于/secured以及其他一些路径。

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

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

2 个答案:

答案 0 :(得分: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`

答案 1 :(得分:0)

您是否可以使用网址管理将特定控制器和操作与/网址相关联?然后,您可以保护除特定控制器/操作对之外的所有内容。