利用CAS实现SSO单点登录(简易版)
开发环境
jdk1.8
maven3.6.3
tomcat9.0(Tomcat至少要8版本以上)
一、搭建CAS Server
- 下载cas-overlay-template-5.3
下载地址:https://github.com/apereo/cas-overlay-template/tree/5.3
版本:5.3
下载为zip压缩文件,然后解压,用IDEA打开项目
- 修改pom文件
打开pom文件,添加国内的maven镜像源地址,加快下载包的速度
<!--添加国内镜像源地址-->
<repository>
<id>maven-ali</id>
<url>http://maven.aliyun.com/nexus/content/groups/public//</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
</repository>
- 打包
先clean,再package
- 去除https认证
因为在本地测试,所以先去除掉https认证
在项目里新建 src.main.resources包,将target目录下的services和application.properties文件复制到resources中
修改HTTPSandIMAPS-10000001.json文件中的serviceId字段,加上http
修改配置文件application.properties,添加下面两行:
cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true
- 连接数据库
不连接数据库时,默认的账号密码为:casuser Mellon
现在添加数据库驱动,使其连接到数据库中的用户账号密码
首先在pom文件中添加jdbc依赖:
<!--新增支持jdbc验证-->
<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.49</version>
</dependency>
然后在配置文件中添加:(数据库连接账号密码需要修改)
#查询账号密码SQL,必须包含密码字段
cas.authn.jdbc.query[0].sql=select * from user where username=?
#指定上面的SQL查询字段名(必须)
cas.authn.jdbc.query[0].fieldPassword=password
#指定过期字段,1为过期,若过期不可用
cas.authn.jdbc.query[0].fieldExpired=expired
#为不可用字段段,1为不可用,需要修改密码
cas.authn.jdbc.query[0].fieldDisabled=disabled
#数据库连接
cas.authn.jdbc.query[0].url=jdbc:mysql://127.0.0.1:3306/cas?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false
#数据库dialect配置
cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.MySQLDialect
#数据库用户名
cas.authn.jdbc.query[0].user=root
#数据库用户密码
cas.authn.jdbc.query[0].password=123456
#数据库事务自动提交
cas.authn.jdbc.query[0].autocommit=false
#数据库驱动
cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver
#超时配置
cas.authn.jdbc.query[0].idleTimeout=5000
#默认加密策略,通过encodingAlgorithm来指定算法,默认NONE不加密
cas.authn.jdbc.query[0].passwordEncoder.type=NONE
#cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8
#cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5
这里对应数据库cas中的user表,表中字段为username、password、expired、disabled
- 重新打包
跟第3步一样,先clean,再package
- 在tomcat上部署
第6步打包后,在target目录下会生成一个cas.war包,将这个war包复制到本地tomcat的安装目录的webapps文件夹(E:\tomcat\apache-tomcat-9.0.41\webapps)下
然后启动tomcat,在tomcat安装目录的bin文件夹(E:\tomcat\apache-tomcat-9.0.41\bin)下,双击startup.bat启动tomcat
启动成功后,浏览器打开 http://localhost:8080/cas/login,可以看到CAS的登录页面
输入数据库中对应的账号密码,登录成功
至此,CAS Server已经部署完成。
二、在SpringBoot项目集成CAS
- 新建两个SpringBoot项目
在IDEA中新建两个SpringBoot项目作为CAS Client
- 添加pom依赖
在两个项目的pom文件中,都加上cas的依赖:
<dependency>
<groupId>net.unicon.cas</groupId>
<artifactId>cas-client-autoconfig-support</artifactId>
<version>2.1.0-GA</version>
</dependency>
- 修改配置文件
在两个项目的配置文件中都加上cas相关的配置:(demo1和demo2的端口号要不一致)
# 应用服务 WEB 访问端口
server.port=9010
# CAS
cas.server-url-prefix=http://localhost:8080/cas
cas.server-login-url=http://localhost:8080/cas/login
cas.client-host-url=http://localhost:9010
cas.validation-type=cas3
- 新建测试类
在两个项目中都写个测试controller,写一个接口,我这里用这个/hello接口
三、测试单点登录
首先要先启动CAS Server,然后启动demo1和demo2
在浏览器中访问写的测试接口,都会跳转到CAS的登录页面
在demo1对应的页面进行登录,登录成功,显示/hello接口返回的数据
然后刷新demo2和CAS Server对应的页面,发现已经登录成功
单点登录demo完成(只验证单点登录功能,单点登出可能会有问题)
参考:
https://blog.csdn.net/Anumbrella/article/details/81045885
https://mp.weixin.qq.com/s/x4VAxtUm3HVllfYEabbfGA