您可以使用 Config.groovy 中的 filterChain 配置来执行此操作,而不是在 resources.groovy 中注册过滤器。声明 spring security 将在 filterchain.filterNames 中使用的所有过滤器,包括您想要的标准过滤器以及您的自定义过滤器:
grails.plugins.springsecurity.filterChain.filterNames = [
'securityContextPersistenceFilter', 'logoutFilter',
'authenticationProcessingFilter', 'firstCustomFilter','secondCustomFilter',
'rememberMeAuthenticationFilter', 'anonymousAuthenticationFilter',
'exceptionTranslationFilter', 'filterInvocationInterceptor'
]
然后将您的自定义过滤器映射到特定的 URL - 使用排除项的一种方法如下:
grails.plugins.springsecurity.filterChain.chainMap = [
'/customUrlOne/**': 'JOINED_FILTERS,-secondCustomFilter',
'/customUrlTwo/**': 'JOINED_FILTERS,-firstCustomFilter',
'/**': 'JOINED_FILTERS,-firstCustomFilter,-secondCustomFilter'
]
JOOINED_FILTERS是您在第一个映射中声明的所有过滤器的集合。在“/**”下,除了已排除的自定义过滤器之外的所有过滤器都将处于活动状态。同样,在自定义 URL 下,所有过滤器(减去排除的用于其他 URL 的自定义过滤器)都将处于活动状态。这将确保前往customUrlOne的流量将被firstCustomFilter拦截,而前往customUrlTwo的流量将被secondCustomFilter拦截。