如何以我的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身份验证。 –