Cas 數據源之Mysql


  Cas 默認使用簡單用戶密碼認證,當用戶密碼一致時則認證通過。

  配置文件:/cas/WEB-INF/deployerConfigContext.xml

  默認配置如下:

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

  

  下面為Cas使用Mysql作為數據源的例子。

  • 數據准備

  創建表,其中: type 可以為 用戶名、郵箱、手機,這樣就可以支持多種方式登錄

create table cas_user_credential (
	user_id varchar(120), 
	user_name varchar(120), 
	encrpted_pwd varchar(120) , 
	type varchar(120),  
	enable_flag(10),
	primary key (user_id,user_name));

   插入三條數據,其中密碼經過了加密,后面講結束加密方式,密碼為 a123456

insert into cas_user_credential (user_id,user_name,encrpted_pwd,type,enable_flag) values('1','hello','iVsxfHa45QTC+zLbtEIBePYM4yE=','username','Y');
insert into cas_user_credential (user_id,user_name,encrpted_pwd,type,enable_flag) values('1','hello@gmail.com','iVsxfHa45QTC+zLbtEIBePYM4yE=','mail','Y');
insert into cas_user_credential (user_id,user_name,encrpted_pwd,type,enable_flag) values('1','13500000000','iVsxfHa45QTC+zLbtEIBePYM4yE=','mobile','Y');
  • 配置Cas Mysql 數據源

  在deployerConfigContext.xml中添加bean,配置Mysql datasource,需要將 mysql-connector-java-5.1.35.jar (任意版本) 添加到 cas/WEB-INF/lib 

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
    <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>  
    <property name="url" value="jdbc:mysql://localhost:3306/cas"></property>  
    <property name="username" value="cas"></property>  
    <property name="password" value="a123456"></property>     
</bean>

  配置認證類,注釋上面的 SimpleTestUsernamePasswordAuthenticationHandler,配置基於數據源的認證類

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

<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"> 
    <property name="dataSource" ref="dataSource" />
    <property name="sql" value="select encrpted_pwd from cas_user_credential where enable_flag = 'Y' and lower(user_name) = lower(?)" />     
</bean>	
  • 密碼加密

  用戶密碼產生時會進行不可逆加密處理再保持到數據庫,所以Cas認證密碼時需要把登錄密碼進行同樣的加密處理再與DB的已加密密碼比對。

  在deployerConfigContext.xml中添加加密bean,該類可以使用Cas提供的默認類,也可以使用自定義加密算法。

<bean id="passwordEncoder" class="com.cux.cas.CuxPasswordEncoder"/>

  在認證類中配置加密屬性,基於上面的配置加上 passwordEncoder屬性即可。

<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"> 
    <property name="dataSource" ref="dataSource" />
    <property name="sql" value="select encrpted_pwd from cas_user_credential where enable_flag = 'Y' and lower(user_name) = lower(?)" />     
    <property name="passwordEncoder" ref="passwordEncoder"/>
</bean>	

  下面提供加密類 com.cux.cas.CuxPasswordEncoder 源碼

  加密類需實現Cas認證的加密接口

  依賴jar包為:cas-server-core-3.4.8.jar 、spring-security-core-3.0.5.RELEASE.jar, 這兩個jar包在 /cas/WEB-INF/lib下都有

package com.cux.cas;

import org.jasig.cas.authentication.handler.PasswordEncoder;  
import org.springframework.security.authentication.encoding.ShaPasswordEncoder;  

public class CuxPasswordEncoder implements PasswordEncoder {

    @Override  
    public String encode(String args) {  
        ShaPasswordEncoder encoder = new ShaPasswordEncoder();  
        encoder.setEncodeHashAsBase64(true);  
        return encoder.encodePassword(args, null);  
    }  
}

  將上面的java類編譯並打成jar包放到 /cas/WEB-INF/lib,再重啟tomcat即完成整個配置過程,用戶可以使用用戶名、郵箱、手機三種方式登錄。

  

  附:Cas自帶MD5密碼加密類,位於 /cas/WEB-INF/lib/cas-server-core-3.5.2.jar

<bean id="Md5PasswordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
        <constructor-arg index="0">
            <value>MD5</value>
        </constructor-arg>
</bean>

  

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

<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"> 
    <property name="dataSource" ref="dataSource" />
    <property name="sql" value="select encrpted_pwd from cas_user_credential where enable_flag = 'Y' and lower(user_name) = lower(?)" />     
    <property name="passwordEncoder" ref="Md5PasswordEncoder"/>
</bean>	

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM