CAS单点登录详解(后面有Springboot+CAS)

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 测试

image
image

(2)导出证书
keytool -export -trustcacerts -file cas.crt -alias CAS_DEMO -keystore cas.keystore -storepass 123456

image
image

(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

image

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 效果

image

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即可.

image

1.2.3 CAS 简单配置

tomcat 的 webapps 下,打开 CAS 的 classes 目录
修改登录的用户名和密码, application.properties中 cas.authn.accept.users=admin::admin
log4j2.xml 日志文件,可自行修改

image
image

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
所有数据库相关配置根据数据库自行修改

image

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>

image

1.3.4 效果

image
image
image

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

image

1.4.2 数据库密码修改

image
image

1.4.3 效果

image

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 项目结构

image

2.3 CAS Server 配置修改

**因为 CAS 服务器默认不支持 http,需要修改一下配置**

2.3.1 添加 http 请求方式

修改 cas 服务 \WEB-INF\classes\services 下的 HTTPSandIMAPS-10000001.json 文件,serviceId 添加 http

image

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 :

image

登录之后:

image

点击商品系统:

image

点击订单系统:

image

点击订单系统中的安全退出:

image

刷新商品系统:

image

刷新门户网站系统:

image

2.6 主要源码(需要源码的可以私信我留下邮箱)

2.6.1 配置文件 application.yml

image

2.6.2 启动类

image

2.6.3 门户网站页面

image

2.6.4 商品系统和订单系统页面

image
image

2.6.5 门户网站、商品系统和订单系统的 controller

image
image
image

3. CAS Server的登录和登出的界面修改

界面修改可以去 \WEB-INF\classes\templates 文件夹下,对一些页面进行修改,这个自行研究即可,没啥技术难点
posted @ 2022-06-12 17:02  OpenSir  阅读(1413)  评论(0编辑  收藏  举报