在 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。 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;
    
    
    
    

    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 &lt;bean id="customUserDetailsService" class="org.aurora.timeexpense.service.MyUserService"/&gt;

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

4.Spring Security Configuration 会这样 &lt;authentication-manager alias="authenticationManager"&gt; &lt;authentication-provider user-service-ref="customUserDetailsService"&gt; &lt;/authentication-provider&gt; &lt;/authentication-manager&gt;

你可以走了。

【讨论】:

以上是关于在 user-service-ref 中使用 jdbc-user-service的主要内容,如果未能解决你的问题,请参考以下文章

如何让 Java Decompiler / JD / JD-Eclipse 在 Eclipse Helios 中运行

安装和使用JD-Eclipse插件

Eclipse怎么在线安装JD-Eclipse反编译插件

使用jd-gui+javassist修改已编译好的class文件

关于jd-gui启动报This program requires Java 1.8+的错误

jd-gui在Ubuntu上打不开