Spring Boot整合CAS单点登录

一、什么是单点登录

单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

我们目前的系统存在诸多子系统,而这些子系统是分别部署在不同的服务器中,那么使用传统方式的session是无法解决的,我们需要使用相关的单点登录技术来解决。

二、什么是CAS

CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点:

【1】开源的企业级单点登录解决方案。

【2】CAS Server 为需要独立部署的 Web 应用。

【3】CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。

从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。下图是 CAS 最基本的协议过程:

test.png

从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server

SSO单点登录访问流程主要有以下步骤:

1.访问服务:SSO客户端发送请求访问应用系统提供的服务资源。

2.定向认证:SSO客户端会重定向用户请求到SSO服务器。

3.用户认证:用户身份认证。

4.发放票据:SSO服务器会产生一个随机的Service Ticket。

5.验证票据:SSO服务器验证票据Service Ticket的合法性,验证通过后,允许客户端访问服务。

6.传输用户信息:SSO服务器验证票据通过后,传输用户认证结果信息给客户端。

三、CAS服务端部署

3.1 template下载

下载CAS 模板 Overlay Template,我这里使用 Apereo CAS 5.3.x 版本,JDK需要1.8+。6.x.x 版本,JDK需要11+。

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

1.解压下载的zip压缩包

2.解压后使用maven命令打包

mvn package
  1. 把target下生成的war包重命名为cas.war放到tomcat下 4. 启动tomcat 5. 找到解压的文件

由于CAS默认使用的是基于https协议,需要改为兼容使用http协议 到D:\software\apache-tomcat-8.5.43\webapps\cas\WEB-INF\classes(这是我的目录,去你对应目录下找,不要找错啊,实在不行用everything搜索吧)目录的application.properties添加如下的内容

cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true

到D:\software\apache-tomcat-8.5.43\webapps\cas\WEB-INF\classes\services目录下的HTTPSandIMAPS-10000001.json 修改内容如下,即添加http

{
  "@class" : "org.apereo.cas.services.RegexRegisteredService",
  "serviceId" : "^(https|http|imaps)://.*",
  "name" : "HTTPS and IMAPS",
  "id" : 10000001,
  "description" : "This service definition authorizes all application urls that support HTTPS and IMAPS protocols.",
  "evaluationOrder" : 10000
}

兼容http修改完毕,由于https协议默认使用的端口为8443,我们修改为tomcat的8080端口 到D:\software\apache-tomcat-8.5.43\webapps\cas\WEB-INF\classes目录的application.properties添加如下的内容

server.port=8080

由于默认的用户名和密码为casuser::Mellon不好记忆, 修改用户名和密码(根据需要修改成自己想要的) 到D:\software\apache-tomcat-8.5.43\webapps\cas\WEB-INF\classes目录的application,properties的最后面修改密码为如下

cas.authn.accept.users=wno5974::19920503

CAS服务器搭建完毕,重启tomcat 进行测试,在浏览器中输入 http://localhost:8080/cas/login 或者 http://localhost:8080/cas

即可跳转到cas服务登录界面,如下图:

test.png

输入账号和密码,即可登入,如下图:

test.png

在浏览器输入 http://localhost:8080/cas/logout 即可退出服务,如下图:

test.png

四、客户端搭建

接下来搭建springboot项目的客户端1

4.1 增加依赖

在新建的springboot项目的pom.xml添加如下依赖(匹配对应的版本)

  <!-- https://mvnrepository.com/artifact/net.unicon.cas/cas-client-autoconfig-support -->
        <dependency>
            <groupId>net.unicon.cas</groupId>
            <artifactId>cas-client-autoconfig-support</artifactId>
            <version>2.3.0-GA</version>
        </dependency>

4.2 修改application.yml

cas:
  server-url-prefix: http://localhost:8080/cas   # #cas服务端的地址
  server-login-url: http://localhost:8080/cas/login  #cas服务端的登录地址
  client-host-url: http://localhost:${server.port}  #当前服务器的地址(客户端)
  validation-type: cas3  #Ticket校验器使用Cas30ProxyReceivingTicketValidationFilter

4.3 修改启动类

@EnableCasClient
@SpringBootApplication
public class CasApplication {

    public static void main(String[] args) {
        SpringApplication.run(CasApplication.class, args);
    }

}

五、测试

5.1 编写测试类

在新建一个测试类TestCas,代码如下:

@RestController
@EnableAutoConfiguration
public class TestCas {

    @RequestMapping("/test")
    public String test(){
        return "test....";
    }

}

5.2 创建服务

test.png

test.png

启动应用后服务如下:

test.png

5.3 测试

客户端1,客户端2和cas服务器搭建好之后,接下来我们进行测试:

1.首先启动上面步骤中放置了cas的tomca服务器,进入D:\software\apache-tomcat-8.5.43\bin目录下,找到startup.bat,双击,即可启动。

2.启动客户端1和客户端2,在浏览器中输入 http://localhost:8088/test

即跳转到cas登录验证界面,如下图:

test.png

在不登录的情况下,在浏览器另一窗口输入客户端2,即在浏览器中输入 http://localhost:8089/test

同样,进入到了cas登录验证界面,如下图:

test.png

当我们在其中一个登录界面登录账号后(假设登录客户端2)就会跳转到登陆后的界面,如下图:

test.png

我们再次在浏览器窗口重新输入客户端1, http://localhost:8089/test ,或者在刚刚输入客户端页面重新刷新

不用登录即可进入页面,如下图:

test.png

posted on 2026-08-10 15:38  爱河  阅读(2)  评论(0)    收藏  举报

导航