2016-04-26 58 views
2

我在工作中使用的應用程序使用Grails 3.我正在嘗試執行預驗證,如article中所述,但由於我無法弄清楚如何禁用常規認證由grails 3 spring security plugin提供。Grails 3 Spring Security預先驗證

這是我目前的情況:用戶A打我的網頁。我想分析請求的標題並取出角色和用戶名信息。如果用戶名或角色爲空,我會將用戶重定向到某個網關。簡而言之,我只想通過調用插件提供的靜態規則來使用spring安全進行授權。即

grails.plugin.springsecurity.controllerAnnotations.staticRules = [ 
    [pattern: '/serviceb/**', access: "hasAnyRole('ROLE_COOL','ROLE_UNCOOL')"], 
    [pattern: '/cools/**', access: ['ROLE_ADMINS']], 
    [pattern: '/*', access: 'isAuthenticated()'] 
] 

這是我需要春季安全做任何登錄功能的原因,作爲first article狀態,我們可以使用它的唯一的身份驗證。

我曾嘗試:

首先,我刪除了我的application.groovy文件中的所有身份驗證有關的呼叫(運行快速啓動該插件時,默認創建的),即連接字符串,搜索過濾器,但靜態規則

接下來,我試圖用這兩個職位提供瞭解決方案:on stackon blog

我創建了一個過濾器,以延長AbstractPreAuthenticatedProcessingFilter

package Cool.service.authentication 
import org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter 
import javax.servlet.http.HttpServletRequest 

class CGAuthenticationFilter extends AbstractPreAuthenticatedProcessingFilter { 
    @Override 
    protected Object getPreAuthenticatedPrincipal(HttpServletRequest request) { "username" } 

    @Override 
    protected Object getPreAuthenticatedCredentials(HttpServletRequest request) { "N/A" } 
} 

我的引導配置現在看起來是這樣的:

import grails.plugin.springsecurity.SecurityFilterPosition 
import grails.plugin.springsecurity.SpringSecurityUtils 

class BootStrap { 

    def init = { servletContext -> 
     SpringSecurityUtils.clientRegisterFilter('CGAuthenticationFilter', SecurityFilterPosition.PRE_AUTH_FILTER.order) 
    } 
} 

我的溫泉資源是這樣的:

import Cool.service.authentication.CGAuthenticationFilter 

beans = { 
    myAuthenticationFilter(CGAuthenticationFilter) { 
     authenticationManager = ref('authenticationManager') 
     checkForPrincipalChanges = true 
    } 
} 

而且最後,將這一行添加到我的application.groovy配置中,用於spring securit Ÿ插件:

grails.plugin.springsecurity.providerNames = ['preAuthenticatedAuthenticationProvider', 'anonymousAuthenticationProvider'] 

不過,我試圖運行的應用程序,其中,服務器「失敗」來啓動和java返回一個非零值,回來的時候得到一個超級geneirc錯誤。這讓我相信我的方向是錯誤的,並且執行完全是錯誤的

+0

爲什麼要禁用Spring安全?你有什麼嘗試?請通過某種需要實現的用例場景。 –

+0

@MikelisBaltruks好吧,我已經添加了更多細節。我不想禁用彈簧安全功能,只能禁用登錄功能。標題將包含我需要的信息。用例場景從第二段開始 – angryip

回答

2

爲了解決這個問題,我不得不更改一些文件。首先,我的引導文件現在包含以下程序塊:

SpringSecurityUtils.clientRegisterFilter('requestHeaderAuthenticationFilter', SecurityFilterPosition.PRE_AUTH_FILTER) 

我的豆(resources.groovy)文件現在包含:

userDetailsService(grails.plugin.springsecurity.userdetails.GormUserDetailsService) { 
    grailsApplication = ref('grailsApplication') 
} 

userDetailsByNameServiceWrapper(org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper) { 
    userDetailsService = ref('userDetailsService') 
} 

preAuthenticatedAuthenticationProvider(org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider) { 
    preAuthenticatedUserDetailsService = userDetailsByNameServiceWrapper 
} 

requestHeaderAuthenticationFilter(Cool.service.authentication.GCHeaderAuthenticationFilter) { 
    authenticationManager = ref('authenticationManager') 
} 

其他,該配置的其餘部分是正確的。

相關問題