一、搭建Tomcat HTTPS支持
CAS采用HTTPS协议处理用户请求,所以我们需要配置tomcat支持HTTPS协议。
第一步:生成密钥库
我们使用jdk自带的keytool工具生成密钥库。
keytool是Java开发工具包(JDK)中的一个命令行工具,用于管理密钥库(keystore)和证书。
keytool -genkey -alias <alias> -keyalg <algorithm> -keystore <keystore> [options]
-genkey
参数用于生成密钥对并将其存储在密钥库中。-alias <alias>
:指定生成的密钥对的别名。别名用于在后续的操作中标识密钥对。例如,-alias mykey
将为生成的密钥对设置别名为"mykey"。-keyalg <algorithm>
:指定生成密钥对时使用的加密算法。常用的加密算法包括RSA、DSA和EC等。例如,-keyalg RSA
将使用RSA算法生成密钥对。-keystore <keystore>
:指定要使用的密钥库文件的路径和名称。密钥库用于存储生成的密钥对和其他相关信息。例如,-keystore mykeystore.jks
将生成的密钥对存储在名为"mykeystore.jks"的密钥库中。-v
参数用于指定详细输出(verbose mode),它可以显示更详细的信息,包括生成密钥对、导入证书等操作的详细过程和结果。[options]
:可选参数,用于进一步配置生成密钥对的选项。一些常用的选项包括:
-keysize <size>
:指定密钥的长度,例如-keysize 2048
表示使用2048位的密钥长度。-validity <days>
:指定证书的有效期(天数),例如-validity 365
表示证书的有效期为365天。-dname <distinguished_name>
:指定用于生成证书的主题信息,包括国家、组织、组织单位等。-storepass <password>
:指定密钥库的密码,用于访问和管理密钥库中的密钥对。
别名java1234;存储路径D:\CAS\keystore
keytool -genkey -v -alias java1234 -keyalg RSA -keystore D:\CAS\keystore\java1234.keystore
在存储路径下可查看下述文件已存在
第二步:从密钥库导出证书
keytool -export -trustcacerts -alias java1234 -file D:\CAS\keystore\java1234.cer -keystore D:\CAS\keystore\java1234.keystore
keytool
: 命令行工具名称,用于执行keytool命令。-export
: 指定要执行的操作是导出证书。-trustcacerts
: 导出证书时,也导出信任的根证书。-alias java1234
: 指定要导出的证书的别名为"java1234"。请确保该别名存在于密钥库中。-file D:\CAS\keystore\java1234.cer
: 指定要导出的证书文件的路径和名称。导出的证书将保存在指定的文件中。-keystore D:\CAS\keystore\java1234.keystore
: 指定密钥库文件的路径和名称。这是包含要导出的证书的密钥库文件。该命令的目的是从密钥库中导出别名为"java1234"的证书,并将其保存在指定的文件中(D:\CAS\keystore\java1234.cer)。
请确保在执行该命令之前,确实存在具有指定别名的证书,并且密钥库文件路径和文件名正确。
第三步:将证书导入到jdk证书库
keytool -import -trustcacerts -alias java1234 -file D:\CAS\keystore\java1234.cer -keystore D:\java\jdk1.8.0_91\jre\lib\security\cacerts
以上命令使用keytool工具来导入证书到信任的根证书库中。下面是命令中各个参数的解释:
- `keytool`: 命令行工具名称,用于执行keytool命令。
- `-import`: 指定要执行的操作是导入证书。
- `-trustcacerts`: 表示将证书导入到信任的根证书库中。
- `-alias java1234`: 指定要导入的证书的别名为"java1234"。
- `-file D:\CAS\keystore\java1234.cer`: 指定要导入的证书文件的路径和名称。该证书文件是要导入的证书的内容。
- `-keystore D:\java\jdk1.8.0_91\jre\lib\security\cacerts`: 指定信任的根证书库的路径和名称。该证书库是Java安装目录下的cacerts文件,用于存储信任的根证书。该命令的目的是将指定路径下的证书文件(D:\CAS\keystore\java1234.cer)导入到Java安装目录下的信任的根证书库(cacerts文件)中,并使用别名"java1234"进行标识。
请确保在执行该命令之前,证书文件路径和文件名正确,以及信任的根证书库的路径和文件名正确。另外,请确保有足够的权限执行该操作。
第四步:
tomcat下载地址:https://tomcat.apache.org/download-90.cgi
下载完成后解压至CAS目录下,进入D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\conf目录下找到server.xml文件
在该文件中添加下述代码
<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="D:\CAS\keystore\java1234.keystore"
keystorePass="666666" />
如图所示
保存后退出,进入D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\bin目录下找到startup.bat文件,双击打开运行
运行结果如下,出现乱码问题:
进入conf目录,打开下述文件
java.util.logging.ConsoleHandler.encoding = UTF-8代码修正为java.util.logging.ConsoleHandler.encoding = GBK
再进入bin目录,启动startup.bat文件,运行乱码问题解决:
测试
访问https://localhost:8443/
能够成功访问tomcat即证明配置成功。
二、CAS Server war下载
下载地址:Central Repository: org/apereo/cas/cas-server-webapp-tomcat/5.3.14
若需要修改后端代码,则需要将github上源码进行下载,修改后进行打包,发布war包。
三、CAS Server发布到tomcat
将下载的war包放进D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps目录下
复制到该目录后,此war包会自动解压,将解压后的文件重命名为cas,并删除war包
回到bin目录下,运行startup.bat文件
启动成功后,我们访问https://localhost:8443/cas/login
若启动无问题,则成功访问到上述网址
进入D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\classes目录下,打开application.properties文件
即cas接收的用户为casuser,密码为Mellon;将其输入至登陆页面,显示登录成功。
若输入的用户名和密码与上述不符,则认证失败
继续在D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\classes目录下,打开log4j2.xml文件
将上述日志的基础路径换为D:\CAS\log
配置域名:C:\Windows\System32\drivers\etc\hosts
保存文件的时候,出现下述错误:
提供解决方案的文章链接:
经尝试,已成功解决。
域名配置成功后,可以利用https://java1234.com:8443/cas访问。
四、CAS配置数据源、数据库用户认证
上述登录使用的用户名密码是在application.properties文件中写死的,但实际开发中,需要配置数据源、进行数据库用户认证。
a.新建数据和表
启动mysql服务
输入mysql -u root -p
之后输入密码即可进入mysql shell
在mysql shell界面依次执行下述命令:
CREATE DATABASE db_sso;
USE db_sso;
CREATE TABLE t_cas (
id int(11) NOT NULL AUTO_INCREMENT,
username varchar(30) DEFAULT NULL,
password varchar(100) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
insert into t_cas(id,username,password) values(1,'java1234','123456');
在 MySQL 中,可以使用 CREATE DATABASE 语句创建数据库,语法格式如下:
CREATE DATABASE [IF NOT EXISTS] <数据库名>
[[DEFAULT] CHARACTER SET <字符集名>]
[[DEFAULT] COLLATE <校对规则名>];
[ ]
中的内容是可选的。语法说明如下:
- <数据库名>:创建数据库的名称。MySQL 的数据存储区将以目录方式表示 MySQL 数据库,因此数据库名称必须符合操作系统的文件夹命名规则,不能以数字开头,尽量要有实际意义。注意在 MySQL 中不区分大小写。
- IF NOT EXISTS:在创建数据库之前进行判断,只有该数据库目前尚不存在时才能执行操作。此选项可以用来避免数据库已经存在而重复创建的错误。
- [DEFAULT] CHARACTER SET:指定数据库的字符集。指定字符集的目的是为了避免在数据库中存储的数据出现乱码的情况。如果在创建数据库时不指定字符集,那么就使用系统的默认字符集。
- [DEFAULT] COLLATE:指定字符集的默认校对规则。
MySQL 的字符集(CHARACTER)和校对规则(COLLATION)是两个不同的概念。字符集是用来定义 MySQL 存储字符串的方式,校对规则定义了比较字符串的方式。后面我们会单独讲解 MySQL 的字符集和校对规则。
mysql中 的 ENGINE = innodb代表存储引擎是innodb。innoDB 是 MySQL 上第一个提供外键约束的数据存储引擎,除了提供事务处理外,InnoDB 还支持行锁,提供和 Oracle 一样的一致性的不加锁读取,能增加并发读的用户数量并提高性能,不会增加锁的数量。InnoDB 的设计目标是处理大容量数据时最大化性能,它的 CPU 利用率是其他所有基于磁盘的关系数据库引擎中最有效率的。
b.修改application.properties配置文件
进入D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\classes目录下,找到application.properties文件
注释掉写死的认证用户
加上jdbc数据源配置
cas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/db_sso?serverTimezone=GMT
cas.authn.jdbc.query[0].user=root
cas.authn.jdbc.query[0].password=123456
cas.authn.jdbc.query[0].sql=select * from t_cas where username=?
cas.authn.jdbc.query[0].fieldPassword=password
cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver
c.加上jdbc驱动包以及支持jar
将事先下载好的jar包复制进D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\lib目录下
d.测试
进入bin目录下启动startup.bat
进入登陆页面登录,发现认证失败,可能是数据库连接出现问题,还不知道怎么解决。
五、CAS client+SpringBoot客户端整合搭建
注意:crm_sys模块下java目录下需要创建包com.java1234,即与步骤三最后所配置的域名需要保持一致。
由于cas默认支持https服务,不支持http服务,现在运行项目,访问http://localhost:9999会出现未认证服务的报错。
现在配置一下http服务,进入D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\classes\services目录,打开HTTPSandIMAPS-10000001.json文件,如下图所示,加入|http
之后回退到上一路径D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\classes,打开application.properties文件,在该文件末尾添加下述代码:
cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true
之后进入bin目录下启动startup.bat,访问http://localhost:9999,发现已可以自动跳转到登陆页面。
输入用户名和密码即可进入相应系统界面。
为更好的验证单点登录,可以多创建几个模块。
测试页面代码如下:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="0">
<title>SSO单点登录系统 Powered by java1234.vip</title>
</head>
<body>
SSO单点登录系统 Powered by java1234.vip<br/>
<a href="http://java1234.com:6666/crm" target="_blank">crm客户关系管理系统</a><br/>
<a href="http://java1234.com:8888/fd" target="_blank">fd财务管理系统系统</a><br/>
<a href="http://java1234.com:9999/hr" target="_blank">hr人力资源管理系统</a><br/>
</body>
测试页面如图:
经测试,单点登入登出正常。
当未登录时,点击进入任意系统,都会跳转到cas单点登录界面,进行登录验证;成功后,进入其余系统也无需进行验证。登出后,其余系统也同步登出。
六、CAS Server界面修改
进入D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\classes目录,打开layout.html文件,将header和footer注释掉。
之后重新启动bin目录下的startup.bat文件,运行效果如图,header和footer已删除:
之后将casLoginView.html文件中如图所示部分进行注释:
运行结果如下:
在D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\classes\static\css\cas.css文件添加下述代码
#notices .rightimg{
width: 500px;
height: 440px;
background-image: url(D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\classes\static\images\login-img.png);
}
在casLoginView.html文件图示位置增加下述一行代码:
启动startup.bat运行效果如图示: