我正在使用spring安全性和基于数据库的身份验证我使用了以下配置并且工作正常
<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标签来验证用户,我还需要做什么?添加额外信息的另一种方法是将整个Users对象说成会话。?
我们将不胜感激。
答案 0 :(得分: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 id="customUserDetailsService" class="org.aurora.timeexpense.service.MyUserService"/>
其中org.aurora.timeexpense.service.MyUserService
是我定义的服务实现UserDetailsService的路径。
4. Spring Security配置将如下所示
<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="customUserDetailsService">
</authentication-provider>
</authentication-manager>
你很高兴。