专注人工智能在金融领域的应用

Spring-LDAP

LDAP-Lightweight Directory Access Protocol。LDAP服务器可以是任何一个开源或商用的LDAP目录服务器,而客户端都可以使用同样的协议、客户端连接软件包和查询命令与LDAP服务器进行交互。

LDAP目录是树形结构,目录由条目组成。条目是具有区别名DN(Distinguished Name)的属性(Attribute)集合,条目相当于表,DN相当于关系数据库表中的关键字(Primary Key),属性由类型(Type)和多个值(Values)组成。

DN-Distinguished Name,区别名,具有唯一性;DC-District,所属区域;OU-Organization Unit,所属组织;CN/UID-Common Name/Unique ID 名字。

如下图,uid-tsyroid的DN就是cn=tsyroid,ou=people,dc=syroidmanor,dc=com

《Spring-LDAP》

 

使用maven管理的话,在项目的pom.xml文件中加入如下依赖:

  1. <dependency>  
  2.   
  3.      <groupId>org.springframework.ldap</groupId>  
  4.   
  5.      <artifactId>spring-ldap-core</artifactId>  
  6.   
  7.      <version>2.0.2.RELEASE</version>  
  8.   
  9.  </dependency>  

applicationContex.xml配置文件

  1.     <!– spring ldap source配置 –>  
  2.   
  3.     <bean id=“contextSource” class=“org.springframework.ldap.core.support.LdapContextSource”>  
  4.   
  5.        <property name=“url” value=“ldap://127.0.0.1:389/” />  
  6.   
  7.        <property name=“base” value=“cn=test,DC=SCTEL,DC=COM,DC=CN” />  
  8.   
  9.        <property name=“userDn” value=“cn=root” />  
  10.   
  11.        <property name=“password” value=“123456″ />  
  12.   
  13. <property name=“referral” value=“follow”></property>  
  14.   
  15.        <property name=“baseEnvironmentProperties”>  
  16.   
  17.            <map>  
  18.   
  19.               <entry key=“com.sun.jndi.ldap.connect.timeout” value=“60000″ />  
  20.   
  21.               <entry key=“java.naming.ldap.attributes.binary” value=“objectGUID” />  
  22.   
  23.               <entry key=“java.naming.security.authentication” value=“GSS Negotiate” />  
  24.   
  25.            </map>  
  26.   
  27.        </property>  
  28.   
  29.     </bean>  
  30.   
  31.     <bean id=“poolingContextSource” class=“org.springframework.ldap.pool.factory.PoolingContextSource”>  
  32.   
  33.        <property name=“contextSource” ref=“contextSource” />  
  34.   
  35.        <property name=“dirContextValidator” ref=“dirContextValidator” />  
  36.   
  37.        <property name=“maxActive” value=“20″ />  
  38.   
  39.        <property name=“maxTotal” value=“40″ />  
  40.   
  41.        <property name=“maxIdle” value=“10″ />  
  42.   
  43.        <property name=“minIdle” value=“5″ />  
  44.   
  45.        <property name=“maxWait” value=“5″ />  
  46.   
  47.        <property name=“testOnBorrow” value=“true” />  
  48.   
  49.        <property name=“testWhileIdle” value=“true” />  
  50.   
  51.     </bean>  
  52.   
  53.     <bean id=“dirContextValidator” class=“org.springframework.ldap.pool.validation.DefaultDirContextValidator” />  
  54.   
  55.     <bean id=“ldapTemplate” class=“org.springframework.ldap.core.LdapTemplate”>  
  56.   
  57.        <property name=“contextSource” ref=“poolingContextSource” />  
  58.   
  59.     </bean>  
  60.   
  61.     <bean id=“springLdapDao” class=“com.xx.application.common.SpringLdapDao”>  
  62.   
  63.        <property name=“ldapTemplate” ref=“ldapTemplate” />  
  64.   
  65.     </bean>  
  66.   
  67.     <bean id=“LdapManager” class=“com.xx.application.common.LdapManager”>  
  68.   
  69.        <property name=“springLdapDao” ref=“springLdapDao” />  
  70.   
  71.     </bean>  
  72.   
  73. </beans>  

LDAP entry 与 Java Bean 映射的条件是 LDAP attribute name 要和 Java Bean 的属性名之间有映射关系,映射关系如下:

  1. private AttributesMapper getAttributesMapper() {   
  2.   
  3.        return new AttributesMapper() {   
  4.   
  5.            public Object mapFromAttributes(Attributes attributes)   
  6.   
  7.                   throws NamingException {   
  8.   
  9.               Map<String, String> ldapUserAttributesMap = LdapUtil   
  10.   
  11.                      .getLdapUserAttributesMap();   
  12.   
  13.               User person = new User();   
  14.   
  15.               person.setUserId(LdapUtil.getGUID((byte[]) attributes.get(   
  16.   
  17.                      ldapUserAttributesMap.get(“userId”)).get()));   
  18.   
  19.               if (attributes.get(ldapUserAttributesMap.get(“account”)) != null) {   
  20.   
  21.                   person.setAccount(attributes   
  22.   
  23.                          .get(ldapUserAttributesMap.get(“account”)).get()   
  24.   
  25.                          .toString());   
  26.   
  27.               }   
  28.   
  29.               if (attributes.get(ldapUserAttributesMap.get(“realName”)) != null) {   
  30.   
  31.                   person.setRealName(attributes   
  32.   
  33.                          .get(ldapUserAttributesMap.get(“realName”)).get()   
  34.   
  35.                          .toString());   
  36.   
  37.               }   
  38.   
  39.               return person;   
  40.   
  41.            }   
  42.   
  43.        };   
  44.   
  45.     }   
  46.   
  47.    

用户模型如下:

  1. public class User implements Serializable {   
  2.   
  3.     private static final long serialVersionUID = 1L;   
  4.   
  5.     private String userId;   
  6.   
  7.     private String account;   
  8.   
  9.     private String password;   
  10.   
  11.     private String realName;   
  12.   
  13.     public User() {   
  14.   
  15.     }   
  16.   
  17.     public User(String userId, String account, String password,String realName) {   
  18.   
  19.        this.userId = userId;   
  20.   
  21.        this.account = account;   
  22.   
  23.        this.password = password;   
  24.   
  25.        this.realName = realName;   
  26.   
  27.     }   
  28.   
  29.     public String getUserId() {   
  30.   
  31.        return userId;   
  32.   
  33.     }   
  34.   
  35.     public void setUserId(String userId) {   
  36.   
  37.        this.userId = userId;   
  38.   
  39.     }   
  40.   
  41.     public String getAccount() {   
  42.   
  43.        return account;   
  44.   
  45.     }   
  46.   
  47.     public void setAccount(String account) {   
  48.   
  49.        this.account = account;   
  50.   
  51.     }   
  52.   
  53.     public String getPassword() {   
  54.   
  55.        return password;   
  56.   
  57.     }   
  58.   
  59.     public void setPassword(String password) {   
  60.   
  61.        this.password = password;   
  62.   
  63.     }   
  64.   
  65.     public String getRealName() {   
  66.   
  67.        return realName;   
  68.   
  69.     }   
  70.   
  71.     public void setRealName(String realName) {   
  72.   
  73.        this.realName = realName;   
  74.   
  75.     }  

LDAP用户认证和用户查询代码如下:

  1. public class SpringLdapDao {   
  2.   
  3.     private LdapTemplate ldapTemplate;   
  4.   
  5.     /**
  6.  
  7.      * 对应的节点信息:  
  8.  
  9.      * DC=SCTEL,DC=COM,DC=CN  
  10.  
  11.      * |–cn=test  
  12.  
  13.      *     |–cn=001       systemId  
  14.  
  15.      *         |–cn=zzt    userId  
  16.  
  17.      */  
  18.   
  19.     public List<User> searchUser(String systemId, String userId) {   
  20.   
  21. return this.getLdapTemplate().search(“cn=” + systemId, “(cn=” + userId + “)”2,  getAttributesMapper());   
  22.   
  23.     }   
  24.   
  25.     public boolean authUser(String systemId, String userId, String password) {   
  26.   
  27.        AndFilter filter = new AndFilter();   
  28.   
  29.        filter.and(new EqualsFilter(“cn”, userId));   
  30.   
  31.        return this.getLdapTemplate().authenticate(“cn=” + systemId, filter.toString(), password);   
  32.   
  33.     }   
  34.   
  35.     public LdapTemplate getLdapTemplate() {   
  36.   
  37.        return ldapTemplate;   
  38.   
  39.     }   
  40.   
  41.     public void setLdapTemplate(LdapTemplate ldapTemplate) {   
  42.   
  43.        this.ldapTemplate = ldapTemplate;   
  44.   
  45.     }   
  46.   
  47. }   
  48.   
  49.    
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>