2011-02-02 94 views
3

創建自定義的身份驗證提供我通過擴展AbstractUserDetailsAuthenticationProvider進行身份驗證對數據庫用戶和執行其他授權檢查創建一個自定義的驗證提供程序。的Spring Security 3.x的:沒有一個UserDetailsS​​ervice

我面臨的煩惱是認證供應商要求我連接一個UserDetailsService。至少在這個項目中,我沒有UserDetailsService的需求,因爲如果我有認證提供者提取用戶信息來執行認證/授權,我不認爲有必要讓UserDetailsService提取相同的用戶信息來構建UserDetails對象。

所以,現在,我要連接一個虛擬UserDetailsService到我的身份驗證提供者,它也絕對沒有什麼。

是否有可能創建一個身份驗證提供程序沒有UserDetailsService

回答

2

尋找在用於AbstractUserDetailsAuthenticationProvider代碼(至少對於3.0.5版本)它不需要的UserDetailsS​​ervice進行接線。仔細檢查您的XML配置以確保DA​​OAuthenticationProvider未被使用。

你應該有這樣的

<authentication-manager> 
    <authentication-provider ref="yourAuthenticationProvider" /> 
</authentication-manager> 

塊同樣,登錄你越來越清楚地看到哪裏是接收來自拋出的異常。

+0

當您執行自定義身份驗證提供程序時,我認爲至少需要註冊一個UserDetailsS​​ervice。我試圖讓它無法工作,也找不到方法。 `工廠方法[org.springframework.security.core.userdetails.UserDetailsS​​ervice org.springframework.security.config.http.UserDetailsS​​erviceFactoryBean.cachingUserDetailsS​​ervice(java.lang.String)]拋出異常;嵌套的異常是org.springframework.context.ApplicationContextException:沒有UserDetailsS​​ervice註冊。「 – skel625 2012-02-23 17:14:06

+0

什麼類拋出嵌套的異常? – sourcedelica 2012-02-23 20:35:58

0

Spring使用的默認身份驗證提供程序將爲DaoAuthenticationProvider(它擴展了AbstractUserDetailsAuthenticationProvider,並在doAfterPropertiesSet()中添加了它自己的一些檢查)。

因此,實現確實需要UserDetailsService,但您始終可以通過擴展AbstractUserDetailsAuthenticationProvider來提供您自己的提供者實現。

相關問題