如何以我的spring mvc web應用程序使用我的基礎MySQL數據庫檢查用戶和密碼驗證的方式定義我的自定義UserDetailsService
bean?爲自定義userdetails服務定義bean
以下是具體情況:
我加入安全的spring petclinic
樣品瞭解春季安全的一種方式。我正在使用Java配置,並且已經創建了一個SecurityConfig.java
文件,它擴展了WebSecurityConfigurerAdapter
。我試圖設置JdbcAuthentication
,該方式利用內置於petclinic樣本中的由ClinicService
工具管理的MySQL數據庫。因此,我創建了一個CustomUserDetailsService
類延伸UserDetailsService
,並且其intented到SecurityConfig.java
與ClinicService.java
鏈接。我創建了一個User
類和Role
類的users
和roles
表,分別模擬在MySQL數據庫。
我加入以下行business-config.xml
定義CustomUserDetailService
:
<bean class="org.springframework.samples.petclinic.service.CustomUserDetailsService"></bean>
但尚未我仍然得到以下錯誤,指出爲CustomUserDetailService
豆尚未定義:
Caused by: java.lang.IllegalArgumentException: Can not set
org.springframework.samples.petclinic.service.CustomUserDetailsService field
org.springframework.security.samples.petclinic.config.SecurityConfig.myCustomUserDetailsService
to $Proxy61
爲了保持這篇文章的簡潔,我已經將相關備份材料加載到文件共享網站。您可以點擊以下鏈接閱讀所有源代碼和完整的堆棧跟蹤:
您可以閱讀SecurityConfig.java
by clicking on this link。
business-config.xml
的代碼是at this link。
CustomUserDetailService.java
的代碼是at this link。
爲User
實體的代碼是at this link。
Role
實體的代碼是at this link。
完整的堆棧跟蹤可以被讀取at this link。
所有應用程序的其他代碼可以在爲Spring PetClinic示例,它可以讀取by clicking on this link GitHub的頁面上找到。
這裏是a link to the code for login.jsp。
這裏是a link to my revised business-config.xml code。
匹配角色名稱好像你的java的配置風格的配置不檢測XML配置定義的bean。看看http://stackoverflow.com/questions/13254779/how-to-import-java-config-class-into-xml-config-so-that-both-contexts-have-beans並嘗試添加'< context:annotation-config />'到xml配置,看看它是否有幫助。 –
我會在business-config.xml中的第一個''下面添加它 –
您應該在SecurityConfig中指定一個接口作爲依賴項,並讓spring容器自動調用一個實現 - 將CustomUserDetailsService更改爲UserDetailsService。另外,如果您打算使用自定義的UserDetailsService執行身份驗證和授權(例如,如果用戶不存在,則爲您的UserDetailsService拋出UsernameNotFoundException),則不需要jdbc身份驗證。 –