由于某些外部原因(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。
答案 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)
您是否可以使用网址管理将特定控制器和操作与/
网址相关联?然后,您可以保护除特定控制器/操作对之外的所有内容。