SOO是现在企业比较流行的业务整合解决方案之一,定义解决登录,可以应用在不同系统中,用户只需要登录一次,就可以访问所有相互信任的应用系统(模块开发、同家公司不同产品等等),例如百度,旗下的子系统。
架构图如下:
一,初步安装部署
准备需要用的cas-server包并配置
- 从CAS官网下载:上cas的官网下载cas server 点击进入官网地址,
笔者这里选择的是5.x.x的最后一个版本5.3.x
- 下载后解压导入IDEA
- 编译打包
- 替换Maven的中央仓库
<!--阿里云仓库-->
<repository>
<id>aliyunmaven</id>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>
<!--中央仓库 比oss稍微快一点-->
<repository>
<id>central.maven.org</id>
<url>http://central.maven.org/maven2/</url>
</repository>
AI 代码解读
- 编译打包下载后的源码,部署到Tomcat里面
3,启动tomcat 成功后打开CAS默认地址:
http://localhost:8080/cas/login
图中箭头显示:非安全连接和静态密码
登录默认的账号密码:
账号:casuser
密码:Mellon
显示登录成功:
- 修改默认的账号账号密码在
webapps\cas\WEB-INF\classes\application.properties 文件中:
初步部署成功!!!
二,动态数据库账号密码支持
- 确认已经更改maven仓库地址(否则会很慢)
<!--阿里云仓库-->
<repository>
<id>aliyunmaven</id>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>
<!--中央仓库 比oss稍微快一点-->
<repository>
<id>central.maven.org</id>
<url>http://central.maven.org/maven2/</url>
</repository>
AI 代码解读
- 在源码包里面添加数据库连接驱动
<!--数据库认证相关 start-->
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-jdbc-drivers</artifactId>
<version>${cas.version}</version>
</dependency>
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-jdbc</artifactId>
<version>${cas.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<!--数据库认证相关 end-->
AI 代码解读
配置登录用户数据库
- 在webapps\cas\WEB-INF\classes\application.properties中修改配置
##
# CAS Authentication Credentials
# 注释静态密码
# cas.authn.accept.users=casuser::Mellon
# cas.authn.accept.users=admin::useradmin
# 配置数据库
cas.authn.jdbc.query[0].url=jdbc:mysql://127.0.0.1:3306/sso?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false
cas.authn.jdbc.query[0].user=root
cas.authn.jdbc.query[0].password=root
cas.authn.jdbc.query[0].sql=select * from sso_user where username=?
cas.authn.jdbc.query[0].fieldPassword=password
cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver
# 添加可以使用http认证
cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true
AI 代码解读
修改cas可支持的service(支持http)
- 编辑 / webapps/ cas/ WEB-INF/ classes/ services/ HTTPSandIMAPS-10000001.json
# 支持http
"serviceId" : "^(https|imaps)://.*", 改为 "serviceId" : "^(https|imaps|http)://.*",
AI 代码解读
编译打包-- >> 部署
静态账号密码提示框已经消失!
对MD5密码提供支持
- 在application.properties文件中添加如下配置
cas.authn.jdbc.query[0].passwordEncoder.type=DEFAULT cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5 cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8
AI 代码解读
配置上之后,重启服务,数据库中存储的密码就是MD5加密过的了。
注意数据库中的MD5密文在CAS系统是区分大小写的,默认是MD5小写匹配。
参考资料 & 致谢
【1】CAS单点登录入门
【2】cas 5.2 单点登录(sso)服务器部署
【3】CAS-5.1.x,配置数据库以及实现自定义加密认证