CAS单点登录详解(后面有Springboot+CAS)
目录
- 1 CAS Server环境搭建(tomcat版本)(本人windows环境,linux环境也差不多)
- 2 Spring-boot + CAS 实现单点登录
- 3. CAS Server的登录和登出的界面修改
1 CAS Server环境搭建(tomcat版本)(本人windows环境,linux环境也差不多)
1.1 Tomcat 配置(支持https,版本tomcat9,tomcat10一直有问题,有兴趣的可以研究一下)
**因为 CAS 默认支持 Https 方式请求,所以需要配置 https 访问。**
1.1.1 利用 keytool 工具生成证书(jdk自带)
(1)生成证书(密码可以自定义,我这里设置为123456)
keytool -genkey -alias CAS_DEMO -keyalg RSA -keystore cas.keystore -storepass 123456
设置的名称和姓氏 junmo.com 是访问的域名,windows环境下可以配置 host 测试
(2)导出证书
keytool -export -trustcacerts -file cas.crt -alias CAS_DEMO -keystore cas.keystore -storepass 123456
(3)导入JDK
keytool -import -trustcacerts -keystore "D:\jdk1.8.0_121\jre\lib\security\cacerts" -file cas.crt -alias CAS_DEMO -storepass changeit
-keystore后面的路径是安装 JDK 的证书路径,jdk的密码为 changeit
1.1.2 配置 tomcat(支持https)
修改 server.xml,添加以下配置
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="D:\CAS\keystore\cas.keystore"
keystorePass="123456"/>
keystoreFile:刚才生成的文件,keystorePass:配置的密码
1.1.3 效果
1.2 下载 CAS 的 war 包,并部署启动
1.2.1 下载 war 包
https://repo1.maven.org/maven2/org/apereo/cas/cas-server-webapp-tomcat/5.3.14/
1.2.2 部署至 tomcat 并启动
将下载的 war 包放到 tomcat 的 webapps 文件夹下,启动tomcat即可.
1.2.3 CAS 简单配置
tomcat 的 webapps 下,打开 CAS 的 classes 目录
修改登录的用户名和密码, application.properties中 cas.authn.accept.users=admin::admin
log4j2.xml 日志文件,可自行修改
1.3 配置数据源,数据库用户认证
1.3.1 新建数据库用户表
数据库表可以自行创建,没有强制的要求,基本的用户名和密码包含就行。
CREATE TABLE `cas_user` (
`id` bigint NOT NULL COMMENT '主键ID',
`username` varchar(50) DEFAULT NULL COMMENT '用户名',
`password` varchar(20) DEFAULT NULL COMMENT '密码',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='单点登录用户表';
1.3.2 修改配置文件
cas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/sso?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
cas.authn.jdbc.query[0].user=root
cas.authn.jdbc.query[0].password=root
cas.authn.jdbc.query[0].sql=select * from cas_user where username = ?
cas.authn.jdbc.query[0].fieldPassword=password
cas.authn.jdbc.query[0].driverClass=com.mysql.cj.jdbc.Driver
所有数据库相关配置根据数据库自行修改
1.3.3 导入 jar 包
jar 包可以去 maven 项目中引入依赖,然后下载到仓库中,再复制到 tomcat 中的 cas 项目的 lib 文件夹下面
本人文件夹地址为:D:\apache-tomcat-9.0.64\webapps\cas\WEB-INF\lib
<dependencies>
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-jdbc-drivers</artifactId>
<version>5.3.14</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-jdbc</artifactId>
<version>5.3.14</version>
</dependency>
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-jdbc-authentication</artifactId>
<version>5.3.14</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
<scope>runtime</scope>
</dependency>
</dependencies>
1.3.4 效果
1.4 配置 CAS 密码加密校验
1.4.1 修改配置文件(application.properties)
添加以下配置:
cas.authn.jdbc.query[0].passwordEncoder.type=DEFAULT
cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8
cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5
1.4.2 数据库密码修改
1.4.3 效果
1.4.4 其他加密设置
加盐加密,SHA-256加密,可自行尝试一下,如果需要也可私信我
2 Spring-boot + CAS 实现单点登录
2.1 导入 maven 依赖
父工程
点击查看代码
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<cas.version>2.3.0-GA</cas.version>
<spring.boot.version>2.2.2.RELEASE</spring.boot.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>net.unicon.cas</groupId>
<artifactId>cas-client-autoconfig-support</artifactId>
<version>${cas.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
子模块
点击查看代码
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-cas</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
</dependency>
<dependency>
<groupId>net.unicon.cas</groupId>
<artifactId>cas-client-autoconfig-support</artifactId>
</dependency>
</dependencies>
2.2 项目结构
2.3 CAS Server 配置修改
**因为 CAS 服务器默认不支持 http,需要修改一下配置**
2.3.1 添加 http 请求方式
修改 cas 服务 \WEB-INF\classes\services 下的 HTTPSandIMAPS-10000001.json 文件,serviceId 添加 http
2.3.2 启用记载 JSON 配置文件
修改 cas 服务 \WEB-INF\classes 下的 application.properties 文件, 添加以下配置:
cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true
2.4 CAS 客户端添加配置(就是搭建的 Spring-boot + CAS 项目工程)(三个子模块配置都一样,只拿一个举例)
2.4.1 配置文件 application.yml(只提供基本配置)
配置的域名主要是为了实现单点登录的效果
server:
port: 10001
cas:
# CAS 服务端地址
server-url-prefix: https://junmo.com:8443/cas
# 客户端如果要登录,会跳转到CAS服务端的登录地址
server-login-url: https://junmo.com:8443/cas/login
# 客户端在CAS服务端登录成功后,自动从CAS服务端跳转回客户端的地址
client-host-url: http://localhost:10001
# Ticket校验器使用 Cas30ProxyReceivingTicketValidationFilter
validation-type: cas3
2.4.2 启动类开启 CAS 客户端应用
启动类添加注解 @EnableCasClient
2.5 效果
首次访问 http://junmo.com:10001 :
登录之后:
点击商品系统:
点击订单系统:
点击订单系统中的安全退出:
刷新商品系统:
刷新门户网站系统:
2.6 主要源码(需要源码的可以私信我留下邮箱)
2.6.1 配置文件 application.yml
2.6.2 启动类
2.6.3 门户网站页面
2.6.4 商品系统和订单系统页面
2.6.5 门户网站、商品系统和订单系统的 controller
3. CAS Server的登录和登出的界面修改
界面修改可以去 \WEB-INF\classes\templates 文件夹下,对一些页面进行修改,这个自行研究即可,没啥技术难点