将CAS-Ad.war进行解包,增加两个jar文件到web-inf/lib目录下,

1.   cas-server-support-ldap-3.4.2.1.jar
2.   spring-ldap-core-1.3.2.RELEASE.jar

注:因为cas-server中采用了Spring的框架,所以需要加入spring-ldap的jar文件,另外cas-server-support-ldap在cas-server/modules下面

 

修改cas-ad/ WEB-INF/ deployerConfigContext.xml

1.   找到authenticationManager

2.   找到authenticationHandlers

3.   将<bean

class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" /> 注释掉

4.   在注释的配置下面增加

<bean class="org.jasig.cas.adaptors.ldap.BindLdapAuthenticationHandler"
                   p:filter="sAMAccountName=%u"
根路径,dc=域名,dc=com"
                   p:contextSource-ref="contextSource"
                   p:ignorePartialResultException="true" />

请根据应用的环境替换ou和dc的信息

 

5.   在authenticationManager下面增加新的bean

<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource">
  <!-- DO NOT enable JNDI pooling for context sources that perform LDAP bind operations. -->
  <property name="pooled" value="false"/>
 
  <!--
    Although multiple URLs may defined, it's strongly recommended to avoid this configuration
    since the implementation attempts hosts in sequence and requires a connection timeout
    prior to attempting the next host, which incurs unacceptable latency on node failure.
    A proper HA setup for LDAP directories should use a single virtual host that maps to multiple
    real hosts using a hardware load balancer.
  -->
  <property name="url" value="LDAP://192.168.0.1:389" />

 

请根据环境信息更换url的地址以及下面的链接帐号信息

    Manager credentials are only required if your directory does not support anonymous searches.

    Never provide these credentials for FastBindLdapAuthenticationHandler since the user's

    credentials are used for the bind operation.

-->
  <property name="userDn" value="test\test_admin"/>
  <property name="password" value="123"/>
 
  <!-- Place JNDI environment properties here. -->
  <property name="baseEnvironmentProperties">
    <map>
      <!-- Three seconds is an eternity to users. -->
      <entry key="com.sun.jndi.ldap.connect.timeout" value="3000" />
      <entry key="com.sun.jndi.ldap.read.timeout" value="3000" />
 
      <!-- Explained at http://download.oracle.com/javase/1.3/docs/api/javax/naming/Context.html#SECURITY_AUTHENTICATION -->
      <entry key="java.naming.security.authentication" value="simple" />
    </map>
  </property>
  </bean>

 

 

完成以上修改后,将改好的cas-ad文件夹进行打包,打包示例:

jar cvf cas-ad.war -C cas-ad /.

-C是指的当前需要编译的目录  /.是包含所有的内容

 

重新部署后,可访问LDAP域信息了

 

 

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

补充下关于LDAP的知识  

常用的LDAP服务器有以下几种

     1:Apache directory server

     2:Sun directory server 

一个开源的,基于LDAP和DSML标准的Directory service。Directory service不仅包括Directory server,还有其它与directory相关的基本service:directory  proxy、virtual dirctory、namespace distribution和数据同步Directory server是一个可以通过网络访问,信息分级存储的数据库。OpenDS只能用在linux操作系统。该项目的地址为:http://www.opends.org/ 

    4: Netscape Directory Server

    5: Window AD

    6: IBM Tivoli Diectory Server

 

LDAP认证配置有两种:

 

[第一种]、FastBindLdapAuthenticationHandler

这种认证处理器一般用于DN是由用户名直接组成的,比如:uid=%u,ou=dev,dc=micmiu.com,dc=com ,其中 %u 就是CAS登

录的用户名。

修改web的配置文件 WEB-INF\deployerConfigContext.xml:

首先在<beans>根节点下添加bean:ContextSource 的配置:

<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource"> 
   <property name="pooled" value="false"/> 
   <property name="url" value="ldap://ldapServerIp:389" /> 
   <property name="userDn" value="cn=root"/> 
   <property name="password" value="your_password"/> 
   <property name="baseEnvironmentProperties"> 
     <map> 
       <entry key="com.sun.jndi.ldap.connect.timeout" value="3000" /> 
       <entry key="com.sun.jndi.ldap.read.timeout" value="3000" /> 
       <entry key="java.naming.security.authentication" value="simple" /> 
     </map> 
   </property> 
 </bean>

 

ContextSource 的配置说明:

(1)如果有多个LDAP服务器,可以通过参数urls 配置多个。

(2)FastBindLdapAuthenticationHandler配置时,这里的userDn 可以配置成

或 “cn=root,ou=dev”  或 “cn=root” 或 “root” 其中的cn=root为LDAP服务器实例的管理员用户,password为对应的密码。

(3)如果LDAP服务器有SSL,注意url配置的前缀是ldaps:”ldaps://ldapServerIp:636″。

在<bean id=”authenticationManager” />下找到SimpleTestUsernamePasswordAuthenticationHandler的配置,修改

成如下:

<bean class="org.jasig.cas.adaptors.ldap.FastBindLdapAuthenticationHandler"> 
     <property name="filter" value="uid=%u,ou=dev,dc=micmiu,dc=com" /> 
     <property name="contextSource" ref="contextSource" /> 
 </bean>

 

[第二种]、BindLdapAuthenticationHandler

这种认证处理器一般用于需要验证的用户名是DN的其他的属性比如email,而不是上面第一种处理器中的uid(当然uid属性同

样适用,下面我们配置的示例就还是用uid)。

修改web的配置文件 WEB-INF\deployerConfigContext.xml:

同样在<beans>根节点下添加bean:ContextSource 的配置:

<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource"> 
     <property name="anonymousReadOnly" value="false" /> 
     <property name="password" value="your_password" /> 
     <property name="pooled" value="false" /> 
     <property name="urls"> 
         <list> 
             <value>ldap://ldapServerIp:389</value> 
         </list> 
     </property> 
     <property name="userDn" value="cn=root,dc=micmiu,dc=com" /> 
     <property name="baseEnvironmentProperties"> 
         <map>

访问配置

     

<entry key="java.naming.security.protocol" value="ssl" /> 
                 --> 
             <entry key="java.naming.security.authentication" value="simple" /> 
         </map> 
     </property> 
 </bean>

在<bean id=”authenticationManager” />修改认证bean的配置,修改成如下:

<bean class="org.jasig.cas.adaptors.ldap.BindLdapAuthenticationHandler"> 
     <property name="filter" value="uid=%u" /> 
     <property name="searchBase" value="dc=micmiu,dc=com" /> 
     <property name="contextSource" ref="contextSource" />

允许多个账号-->

<property name="allowMultipleAccounts" value="true" /> 
 </bean>