而不是在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