在user-service-ref中使用jdbc-user-service

时间:2012-11-20 14:40:45

标签: java session authentication spring-security

我正在使用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对象说成会话。?

我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

经过几个小时的搜索和实验,我能够做到这一点。

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

    @服务 公共类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"/>
  4. 其中org.aurora.timeexpense.service.MyUserService是我定义的服务实现UserDetailsS​​ervice的路径。

    4. Spring Security配置将如下所示  <authentication-manager alias="authenticationManager">        <authentication-provider user-service-ref="customUserDetailsService">         </authentication-provider>    </authentication-manager>

    你很高兴。