在 user-service-ref 中使用 jdbc-user-service
Posted
技术标签:
【中文标题】在 user-service-ref 中使用 jdbc-user-service【英文标题】:Using jdbc-user-service inside user-service-ref 【发布时间】:2012-11-08 15:50:40 【问题描述】:我正在使用 spring security 和基于数据库的身份验证,我使用了以下配置及其工作正常
<authentication-manager alias="authenticationManager">
<authentication-provider>
<jdbc-user-service data-source-ref="dataSource"
users-by-username-query="SELECT ...... U.email_address=?"
authorities-by-username-query="SELECT ... U.email_address=?">
</authentication-provider>
</authentication-manager>
现在我想在会话中添加额外信息并遇到Adding user to session, spring security default login,我尝试了,但现在遇到了问题。
XML 说我不能同时使用 user-service-ref 和 jdbc-user-service。有没有办法解决它,或者如果我必须使用 user-service-ref 标签来验证用户,我必须做什么?将额外信息添加到会话中的其他方法是什么?比如整个用户对象。
您的帮助将不胜感激。
【问题讨论】:
我已经删除了 jdb-user-service 标签,现在只在 authentication-provider 中使用 user-service-ref 标签,例如 和 authentication工作正常。现在我想要的是在我的 customUserDeatilsService 中返回自定义用户详细信息而不是 org.springframework.security.core.userdetails.User 但我不知道该怎么做,如果有什么我能做的,请帮助我。跨度> 【参考方案1】:经过数小时的搜索和试验,我能够做到这一点。
创建一个新服务,比如 MyUserService,它将实现 org.springframework.security.core.userdetails.UserDetailsService
并具有注释 @Service
。 UserDetailsService 只有一种方法loadUserByUserName
。此方法的实现将在 MyUserService 中。它看起来像这样。
@服务 公共类 MyUserService 实现 UserDetailsService
@Override
public UserDetails loadUserByUsername(String arg0)
throws UsernameNotFoundException
MyUser user=new MyUser();
/*get details of user and authorities from database whose username is
arg0 and place them in user instance */
return user;
MyUser 也是一个实现org.springframework.security.core.userdetails.UserDetails
的新类,它的所有方法都在 MyUser 类中实现。它看起来像这样。
public class MyUser implements UserDetails
private static final long serialVersionUID = 1L;
/*All the variables their getter setters that you wish to store in session. And
implementation of all the methods of UserDetails go here.*/
像这样定义一个bean
<bean id="customUserDetailsService" class="org.aurora.timeexpense.service.MyUserService"/>
org.aurora.timeexpense.service.MyUserService
是我定义的实现 UserDetailsService 的服务的路径。
4.Spring Security Configuration 会这样
<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="customUserDetailsService">
</authentication-provider>
</authentication-manager>
你可以走了。
【讨论】:
以上是关于在 user-service-ref 中使用 jdbc-user-service的主要内容,如果未能解决你的问题,请参考以下文章
如何让 Java Decompiler / JD / JD-Eclipse 在 Eclipse Helios 中运行
使用jd-gui+javassist修改已编译好的class文件