• 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>	
    

      

      

  • 相关阅读:
    【计算机组成与系统结构】计算机的分类与发展趋势
    【计算机组成与系统结构】计算机的硬件系统和软件系统
    【Linux常用指令整理2】查看文件,软、硬链接
    【计算机的物理实现】PN结的电容效应
    【计算机组成与系统结构】电子计算机的诞生
    编译hadoopeclipseplugins1.2.1插件步骤
    Google抛弃MapReduce使用Cloud Dataflow
    Hadoop家族学习路线图
    2.1 Hadoop Eclipse Plugin 配置及安装
    Hadoop学习笔记目录
  • 原文地址:https://www.cnblogs.com/chenyongjun/p/4770107.html
Copyright © 2020-2023  润新知