而不是在resources.groovy中注册过滤器,您可以使用Config.groovy中的filterChain配置来执行此操作。声明所有的过滤器弹簧安全将使用在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'
]
JOINED_FILTERS是集您在第一张地图中声明的所有过滤器。在“/ **”下,除您排除的自定义过滤器以外的所有过滤器都将处于活动状态。同样,在自定义网址下,所有过滤条件将减去为其他网址指定的已排除的自定义过滤条件。这将确保交通要customUrlOne将截获firstCustomFilter和交通要customUrlTwo将secondCustomFilter被截获。
没有得到这个工作。在resources.groovy中取消注释我的过滤器注册,并添加了上面的代码,获得投诉,我的过滤器在启动期间没有找到(意思是我需要注册它吗?)。 即使我注册了它链路地图发生了什么错误,因为它似乎从来没有打我的自定义过滤器 – Iman
现在我创建了一个替代解决方案,其中我的登录表单发布一个字段的身份验证方法,然后我注册一个过滤器作为authenticationProcessingFilter和在那里根据所提出的认证方法确定要创建什么认证对象。 认证对象如下 布尔支撑物连接到我的认证供应商(类<?扩展对象> authenticationClass){ CustomAuthentication.isAssignableFrom authenticationClass } 但是你的解决方案是更优雅,如果我能得到它的工作:) – Iman