1

我正在使用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>

现在我想向会话添加额外的信息,遇到了将用户添加到会话,spring security default login,我试过了,现在我遇到了问题。

XML 说我不能同时使用 user-service-ref 和 jdbc-user-service。有没有办法解决它,或者如果我必须使用 user-service-ref 标签来验证用户身份,我必须做什么?将额外信息添加到会话中的其他方法是什么,比如整个用户对象。?

您的帮助将不胜感激。

4

1 回答 1

1

经过数小时的搜索和试验,我能够做到这一点。

  1. 做一个新的服务说 MyUserService 将实现org.springframework.security.core.userdetails.UserDetailsService并具有 annotation @Service。UserDetailsS​​ervice 只有一种方法loadUserByUserName。此方法的实现将在 MyUserService 中。它看起来像这样。

    @Service 公共类 MyUserService 实现 UserDetailsS​​ervice {

    @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;
    }
    
    }
    
  2. 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.*/
    
     }
    
  3. 像这样定义一个bean <bean id="customUserDetailsService" class="org.aurora.timeexpense.service.MyUserService"/>

org.aurora.timeexpense.service.MyUserService我定义的实现 UserDetailsS​​ervice 的服务的路径在哪里。

4.Spring安全配置会这样 <authentication-manager alias="authenticationManager"> <authentication-provider user-service-ref="customUserDetailsService"> </authentication-provider> </authentication-manager>

你已准备好出发。

于 2012-11-21T11:44:06.683 回答