当前位置:网站首页>手把手教你用代码实现SSO单点登录
手把手教你用代码实现SSO单点登录
2022-07-15 09:18:00 【Hollis Chuang】
1. 概述
1.1. 什么是SSO?
Hollis的新书限时折扣中,一本深入讲解Java基础的干货笔记!
单点登录( Single Sign-On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要 登录一次 就可以访问所有相互信任的应用系统。
1.2. 什么是CAS?
随着SSO技术的流行,相关产品也比较多,其中CAS就是一套解决方案,CAS(Central Authentication Service)中文翻译为统一身份认证服务或中央身份服务,它由服务端和客户端组成,实现SSO,并且容易进行企业应用的集成。
CAS是Yale大学(耶鲁)发起的一个开源项目,旨在为web应用系统提供一种可靠的单点登录方法,CAS在2004年12月正式成为JA-SIG的一个项目。
官网:https://www.apereo.org/projects/cas

CAS具有以下的特点:
开源的企业级单点登录解决方案
CAS Server为需要独立部署的web应用
CAS Client支持非常多的客户端(这里指单点登录系统中的各个web应用),包括 Java、.Net 、ISAPI、Php、Perl、uPortal、Acegi、Ruby、VBScript等客户端
有了CAS,我们的系统架构就演变成下面这样的:

从架构上可以看出,CAS包含两个部分:CAS Server和CAS Client.
CAS Server需要独立部署,主要负责对用户的认证工作,CAS Client负责处理
对客户端受保护资源的访问请求,需要登录,重定向到CAS Server。
下面,我们一步步搭建CAS实现SSO.
1.3. 开发环境要求
Jdk1.8+ maven3.6 idea tomcat9.0+ windows10
2. CAS Server服务器端
2.1. CAS服务器端软件包下载
下载版本为5.3
下载服务器的overlay地址: https://github.com/apereo/cas-overlay-template/tree/5.3
压缩包:cas-overlay-template-5.3.zip
解压好后用命令:build.cmd package
然后用编译的目录查看war包:

2.2. 服务器端的基本部署和测试
将war包放到tomcat的webapp中,然后启动tomcat
访问地址:http://localhost:8080/cas 或者 http://localhost:8080/cas/login

默认用户名和密码在\webapps\cas\WEB-INF\classes\application.properties里面 用户名:casuser 密码:Mellon

2.3. CAS Server服务器配置
2.3.1 去除https认证
CAS默认使用的是HTTPS协议,如果使用HTTPS协议需要SSL安全证书(需向特定的机构申请和购买)。如果对安全要求不高或是在开发测试阶段,可使用HTTP协议。我们这里讲解通过修改配置,让CAS使用HTTP协议。
微信搜索公众号:Java后端编程,回复:java 领取资料 。
修改CAS服务端配置文件:
\cas\WEB-INF\classes\application.properties里添加如下内容:
cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true\cas\WEB-INF\classes\services目录下的HTTPSandIMAPS-10000001.json修改内容如下:
"serviceId" : "^(https|http|imaps)://.*"3. CAS Client客户端配置(自己项目)
Pom文件的依赖即pom.xml
<dependency>
<groupId>net.unicon.cas</groupId>
<artifactId>cas-client-autoconfig-support</artifactId>
<version>2.1.0-GA</version>
</dependency>application.yml配置文件
微信搜索公众号:架构师指南,回复:架构师 领取资料 。
客户端1
server:
port: 9010
cas:
server-url-prefix: http://localhost:8080/cas
server-login-url: http://localhost:8080/cas/login
client-host-url: http://localhost:9010
validation-type: cas3注:启动类追加开启CAS的注解@EnableCasClient
项目中新建一个测试类
iimport io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Api(description = "SSO-CAS的测试")
public class TestController {
@GetMapping("/test1")
public String test1(){
return "test1....";
}
}客户端2
server:
port: 9011
cas:
server-url-prefix: http://localhost:8080/cas
server-login-url: http://localhost:8080/cas/login
client-host-url: http://localhost:9011
validation-type: cas3注:启动类追加开启CAS的注解@EnableCasClient
项目中新建一个测试类
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Api(description = "SSO-CAS的测试")
public class TestController {
@GetMapping("/test2")
public String test1(){
return "test2....";
}
}客户端1,客户端2和cas服务器搭建好之后,接下来我们进行测试:
1.首先启动tomcat服务器中的CAS Server。
2.分别启动客户端1和客户端2,然后在浏览器地址栏输入客户端1的地址http://localhost:9010/test1

在不登录的状态,在浏览器的地址栏继续输入客户端2的地址:http://localhost:9011/test2

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

我们再次在浏览器窗口重新输入客户端1,http://localhost:9010/test1,或者在刚刚输入客户端页面重新刷新,不用登录即可进入页面,如下图:

以上就是单点登录的测试。
完
我的新书《深入理解Java核心技术》已经上市了,上市后一直蝉联京东畅销榜中,目前正在6折优惠中,想要入手的朋友千万不要错过哦~长按二维码即可购买~

长按扫码享受6折优惠
往期推荐
有道无术,术可成;有术无道,止于术
欢迎大家关注Java之道公众号

好文章,我在看️
边栏推荐
- nVisual API接口使用说明
- 内核的结构和设计
- It looks like a very powerful VBS little programmer code
- oracledb_ Exporter monitors Oracle, a very low intrusive monitoring scheme.
- HCIP第七天笔记
- LOCUST性能測試1(認識)
- 15.1.1 MySQL - date time function of MySQL, date format
- Count the age distribution (interval statistics of 5 years old) and draw the age distribution map.
- 京东店铺的所有商品API接口(item_search_shop-获得店铺的所有商品API接口),整店商品API接口
- nVisual二次开发——第一章 入门介绍
猜你喜欢

LOCUST性能測試1(認識)
![[C language] analog address book (array version, dynamic version, linked list version)](/img/0e/ff1db5e633e8a626a1a058c5241798.png)
[C language] analog address book (array version, dynamic version, linked list version)

LOCUST性能测试1(认识)

微信公众号-服务器配置(token验证)

JMeter regular expression gets login token

1688 API interface for all goods in the store (API interface for querying all goods in the whole store)

Smart breeding scheme based on Lora gateway

Sword finger offer 06 Print linked list from end to end

.NET Core 使用 ImageSharp 生成图片

dlvm-netcore 开源框架
随机推荐
What is sectigo?
Structure and design of kernel
几行汇编几行C实现一个最简单的内核
A few lines of assembly, a few lines of C to achieve the simplest kernel
如何调试 C# Emit 生成的动态代码?
pytest+request+allure+excel接口自动化搭建 从0到1【三 封装Request请求】
使用 docker 搭建 grafana+prometheus 监控数据库资源(贰)
Go language pointer
PLC通过伯努利方程近似计算水箱流量(FC)
Nvisual API interface instructions
Pinduoduo keyword search interface, commodity classification ID search commodity list interface, keyword search commodity sales interface, pinduoduo sales API interface
DLVM NETCORE open source framework
Process testing
Problems and solutions of wechat applet related knowledge points and cloud music project production
There are surprises when opening
"PHP implementation of Domain Driven Design" - Application Services [reprint]
Understand explicit and implicit in C #
拼多多店铺所有商品API接口(整店商品列表查询接口)
Stuck or deadlock events in the use of MySQL Library
Smart breeding scheme based on Lora gateway



