Cas 默认使用简单用户密码认证,当用户密码一致时则认证通过。
配置文件:/cas/WEB-INF/deployerConfigContext.xml
默认配置如下:
下面为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
配置认证类,注释上面的 SimpleTestUsernamePasswordAuthenticationHandler,配置基于数据源的认证类
密码加密
用户密码产生时会进行不可逆加密处理再保持到数据库,所以Cas认证密码时需要把登录密码进行同样的加密处理再与DB的已加密密码比对。
在deployerConfigContext.xml中添加加密bean,该类可以使用Cas提供的默认类,也可以使用自定义加密算法。
在认证类中配置加密属性,基于上面的配置加上 passwordEncoder属性即可。
下面提供加密类 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
MD5