本来主要详细是介绍CAS和LDAP整合实现单点登录的步骤。
1、LDAP安装配置
详见:
安装配置,添加部分测试数据如下:
见SSO之CAS单点登录实例演示
如果是Mave构建项目的,添加LDAP的相关依赖:
<dependency> <groupId>org.jasig.cas</groupId> <artifactId>cas-server-support-ldap</artifactId> <version>${cas.version}</version> </dependency> <!--仅仅在使用到连接池时添加该依赖 <dependency> <groupId>commons-pool</groupId> <artifactId>commons-pool</artifactId> <version>${apache.commons.pool.version}</version> </dependency> -->
如果不是maven项目,需要cas-server-support-ldap-3.4.11.jar(官网下载的发布包cas-server-3.5.2-release.zip的 modules下) 和spring-ldap-core-1.3.1.RELEASE.jar
[第一种]、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://127.0.0.1:389" /> <property name="userDn" value="cn=Manager"/> <property name="password" value="secret"/> <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 的配置说明:
在<bean id=”authenticationManager” />下找到SimpleTestUsernamePasswordAuthenticationHandler的配置,修改成如下:
<bean class="org.jasig.cas.adaptors.ldap.FastBindLdapAuthenticationHandler"> <property name="filter" value="uid=%u,ou=Developer,dc=micmiu,dc=com" /> <property name="contextSource" ref="contextSource" /> </bean>
配置好后分别启动三个应用:tomcat-cas、tomcat-app1、tomcat-app2,进行认证测试:
[第二种]、BindLdapAuthenticationHandler
这种认证处理器一般用于需要验证的用户名是DN的其他的属性比如email,而不是上面第一种处理器中的uid(当然uid属性同样适用,下面我们配置的示例是用mail)。
修改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="secret" /> <property name="pooled" value="true" /> <property name="urls"> <list> <value>ldap://127.0.0.1:389</value> </list> </property> <property name="userDn" value="cn=Manager,dc=micmiu,dc=com" /> <property name="baseEnvironmentProperties"> <map> <!-- LDAP SSL访问配置 <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="mail=%u" /> <property name="searchBase" value="dc=micmiu,dc=com" /> <property name="contextSource" ref="contextSource" /> <!-- 允许多个账号--> <property name="allowMultipleAccounts" value="true" /> </bean>
配置好后分别启动三个应用:tomcat-cas、tomcat-app1、tomcat-app2,进行认证测试:
如果把参数:searchBase的值修改为:”ou=Developer,dc=micmiu,dc=com”,重新启动测试认证的结果如下:
此时的认证效果和第一种的认证效果是一样的。
有关连接池的配置可以参见官网介绍:https://wiki.jasig.org/display/CASUM/LDAP