Fork me on GitHub

SSO单点登录系列3:cas-server端配置认证方式实践

详见:http://blog.csdn.net/ae6623/article/details/8851801

文中所有资料下载地址:在文章中最下方。

 

本篇将讲解cas-server端的认证方式

 

1.最简单的认证,用户名和密码一致就登录成功

2.配置oracle的jdbc数据源,通过spring动态查询数据库

3.配置oracle和mysql的数据源,通过spring动态查询数据库,一个满足就立即登录成功

4.配置oracle和mysql的数据源,以及添加一个java类,三者认证,有一个满足就立即登录成功。

5.穿插自定义的MD5加密类对用户的密码进行加密和数据库里已经MD5加密的密码做对比。

 

好的,开始吧。

 

测试一:

 

ps:记得添加上所需的jar包,否则控制台会提示找不到数据库驱动这种低级错误。

 

jar包:

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

cas-server-support-jdbc-3.3.3.jar

ojdbc14.jar

mysql-connector-java-5.1.16-bin.jar

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

 

(1)最简单的认证,用户名和密码一致就登录成功

 

步骤:打开你的C:\tomcat7\webapps\casServer\WEB-INF\deployerConfigContext.xml文件

 

<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />

这一句话就是默认的认证模式,直接用户名和密码一致就可以登录系统了,显然太白痴了一点。下面我们开始玩测试二

 

测试二:

(2)配置oracle的jdbc数据源,通过spring动态查询数据库

 

步骤:

1.打开你的C:\tomcat7\webapps\casServer\WEB-INF\deployerConfigContext.xml文件

2.注释掉那句很白痴的用户名和密码一致就让你认证通过的那行xml代码

3.添加oracle认证模式,添加自定义的MD5类,添加默认的cas的MD5验证类,添加oracle的数据源

<span style="font-family:Microsoft YaHei;font-size:14px;"><property name="authenticationHandlers">
  <list>
    <bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient" p:requireSecure="false" />
    <!-- 不https验证: p:requireSecure="false" -->
    <!-- 默认认证模式:用户名和密码一致就认证通过 
             <bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />  
     -->
    <!--配置验证类1-->
    <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
      <property name="dataSource" ref="dataSource"></property>
      <property name="sql" value="select pw from sys_acct_auth where user_code =?"></property>
      <!--下面这个是我自定义的MD5加密类-->
      <property name="passwordEncoder" ref="RS10Md5PasswordEncoder"></property>
      <!--下面这个是cas提供的MD5加密类,下面会有bean,你自己一睁眼就看到了,玩过spring的应该看一眼就吐了
               <property name="passwordEncoder" ref="MD5PasswordEncoder" ></property>
         -->
    </bean>
  </list>
</property>
<!-- 增加数据源1-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
  <property name="url" value="jdbc:oracle:thin:@192.168.168.144:1521:hpora" />
  <property name="username" value="muapp10g" />
  <property name="password" value="ceshiku" />
</bean>
                      
<!--数据验证模式1 cas默认MD5加密类,返回值:加密后的字符串-->
<bean id="MD5PasswordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
  <constructor-arg index="0" value="MD5" />
</bean>
                      
<!--数据验证模式2 我自定义的MD5加密类,返回值:加密后的字符串-->
<bean id="RS10Md5PasswordEncoder" class="org.jasig.cas.authentication.handler.Crypt"></bean></span>

 

 

测试三:

(3)配置oracle和mysql的数据源,通过spring动态查询数据库,一个满足就立即登录成功

(4)配置oracle和mysql的数据源,以及添加一个java类,三者认证,有一个满足就立即登录成功。

(5)穿插自定义的MD5加密类对用户的密码进行加密和数据库里已经MD5加密的密码做对比。

 

有人说我的web1应用和web2应用拥有各自的用户群,各自的注册数据库,怎么办?对啊怎么办?

 

那么我们就在验证类的List标签里面多添加几个验证类,只要有一个验证方式通过了,我们就让用户登录成功,如何?

 

开始干吧,继续改造上面的那个xml文件。

 

最终的xml文件如下所示:

 

<span style="font-family:Microsoft YaHei;font-size:14px;"><property name="authenticationHandlers">
  <list>
    <bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient" p:requireSecure="false" />
    <!-- 不https验证: p:requireSecure="false" -->
    <!-- 默认认证模式:用户名和密码一致就认证通过 
             <bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />  
     -->
                        
    <!--配置验证类1-->
    <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
      <property name="dataSource" ref="dataSource"></property>
      <property name="sql" value="select pw from sys_acct_auth where user_code =?"></property>
      <!--下面这个是我自定义的MD5加密类-->
      <property name="passwordEncoder" ref="RS10Md5PasswordEncoder"></property>
      <!--下面这个是cas提供的MD5加密类,下面会有bean,你自己一睁眼就看到了,玩过spring的应该看一眼就吐了
               <property name="passwordEncoder" ref="MD5PasswordEncoder" ></property>
         -->
    </bean>
                        
    <!--配置验证类2-->
    <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
      <property name="dataSource" ref="dataSourceForMySql"></property>
      <property name="sql" value="select pw from userInfo where username =?"></property>
    </bean>
                        
    <!--配置验证类3-->
    <bean class="org.jasig.cas.authentication.handler.RsCasDaoAuthenticationHandler" />
  </list>
</property>
                    
<!-- 增加数据源1-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
  <property name="url" value="jdbc:oracle:thin:@192.168.168.144:1521:hpora" />
  <property name="username" value="muapp10g" />
  <property name="password" value="ceshiku" />
</bean>
                    
<!-- 增加数据源2-->
<bean id="dataSourceForMySql" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName">
    <value>com.mysql.jdbc.Driver</value>
  </property>
  <property name="url">
    <value>jdbc:mysql://localhost:3306/userdb</value>
  </property>
  <property name="username">
    <value>root</value>
  </property>
  <property name="password">
    <value>123</value>
  </property>
</bean>
                    
<!--数据验证模式1 cas默认MD5加密类,返回值:加密后的字符串-->
<bean id="MD5PasswordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
  <constructor-arg index="0" value="MD5" />
</bean>
                    
<!--数据验证模式2 我自定义的MD5加密类,返回值:加密后的字符串-->
<bean id="RS10Md5PasswordEncoder" class="org.jasig.cas.authentication.handler.Crypt"></bean></span>

 

截图如下:

 

 

 

ok 以上xml文件就可以满足你的一些简单的BT需求了。如果看到这里还有什么疑惑的话,我估计就是那些自定义的java类怎么写了。来来来,我教你。

 

 

下面的步骤详见:http://blog.csdn.net/ae6623/article/details/8851801

posted @ 2013-04-25 20:26  _落雨  阅读(732)  评论(0编辑  收藏  举报