Bootstrap

利用CAS实现SSO单点登录(简易版)

利用CAS实现SSO单点登录(简易版)

开发环境

jdk1.8

maven3.6.3

tomcat9.0(Tomcat至少要8版本以上)

一、搭建CAS Server

  1. 下载cas-overlay-template-5.3

下载地址:https://github.com/apereo/cas-overlay-template/tree/5.3

版本:5.3

下载为zip压缩文件,然后解压,用IDEA打开项目

  1. 修改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>

在这里插入图片描述

  1. 打包

先clean,再package

在这里插入图片描述

  1. 去除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
  1. 连接数据库

不连接数据库时,默认的账号密码为: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

在这里插入图片描述

  1. 重新打包

跟第3步一样,先clean,再package

  1. 在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

  1. 新建两个SpringBoot项目

在IDEA中新建两个SpringBoot项目作为CAS Client

在这里插入图片描述

  1. 添加pom依赖

在两个项目的pom文件中,都加上cas的依赖:

<dependency>
    <groupId>net.unicon.cas</groupId>
    <artifactId>cas-client-autoconfig-support</artifactId>
    <version>2.1.0-GA</version>
</dependency>

在这里插入图片描述

  1. 修改配置文件

在两个项目的配置文件中都加上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
  1. 新建测试类

在两个项目中都写个测试controller,写一个接口,我这里用这个/hello接口

在这里插入图片描述

三、测试单点登录

首先要先启动CAS Server,然后启动demo1和demo2

在浏览器中访问写的测试接口,都会跳转到CAS的登录页面

在这里插入图片描述
在这里插入图片描述

在demo1对应的页面进行登录,登录成功,显示/hello接口返回的数据

在这里插入图片描述

然后刷新demo2和CAS Server对应的页面,发现已经登录成功

在这里插入图片描述
在这里插入图片描述

单点登录demo完成(只验证单点登录功能,单点登出可能会有问题)

参考:

  1. https://blog.csdn.net/Anumbrella/article/details/81045885

  2. https://mp.weixin.qq.com/s/x4VAxtUm3HVllfYEabbfGA

;