CAS5.3使用JPA实现动态注册服务

cas同时支持cas协议和OAuth2协议,官方默认是通过扫描json文件的形式注册客户端服务,但是此种方式需要重启服务才能生效,此次我们将使用JPA来完美实现动态注册服务,如果不知道cas如何部署,可以擦看之前的文章

cas-client基于CAS协议客户端搭建-CSDN博客

cas-server5.3自定义密码校验规则_cas-server 自定义加密验证-CSDN博客

CAS服务端的搭建并配置OAtuh2.0协议_cas oauth2.0-CSDN博客

添加pom依赖

<dependency><groupId>org.apereo.cas</groupId><artifactId>cas-server-support-jpa-service-registry</artifactId><version>${cas.version}</version>
</dependency>
<dependency><groupId>org.apereo.cas</groupId><artifactId>cas-server-core-services-api</artifactId><version>${cas.version}</version>
</dependency>
<dependency><groupId>org.apereo.cas</groupId><artifactId>cas-server-core-authentication-attributes</artifactId><version>${cas.version}</version>
</dependency>

添加配置

#数据库用户名
cas.serviceRegistry.jpa.user=root
#数据库密码
cas.serviceRegistry.jpa.password=root
#mysql驱动
cas.serviceRegistry.jpa.driverClass=com.mysql.cj.jdbc.Driver
#数据库连接
cas.serviceRegistry.jpa.url=jdbc:mysql://localhost:3306/db_user?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false
cas.serviceRegistry.jpa.dialect=org.hibernate.dialect.MySQL5Dialect
#连接池配置
cas.serviceRegistry.jpa.pool.suspension=false
cas.serviceRegistry.jpa.pool.minSize=6
cas.serviceRegistry.jpa.pool.maxSize=18
cas.serviceRegistry.jpa.pool.maxWait=2000
cas.serviceRegistry.jpa.pool.timeoutMillis=1000
#默认为create-drop,表示每次启动服务都会清除你之前注册的cas服务
cas.serviceRegistry.jpa.ddlAuto=update

第一次启动需要将cas.serviceRegistry.jpa.ddlAuto设置为create-drop,启动后会创建如下表结构

 编写逻辑

@RestController
@RequestMapping
public class RegistrationServiceController {@Autowired@Qualifier("servicesManager")private ServicesManager servicesManager;@Autowiredprivate RegexregisteredserviceService regexregisteredserviceService;@GetMapping("/addOAuth")public void addOAuthClient(@RequestParam("serviceId") String serviceId,@RequestParam("clientId") String clientId,@RequestParam("clientSecret") String clientSecret,@RequestParam("name")String name) {OAuthRegisteredService service = new OAuthRegisteredService();ReturnAllAttributeReleasePolicy re = new ReturnAllAttributeReleasePolicy();service.setClientId(clientId);service.setClientSecret(clientSecret);service.setServiceId(serviceId);service.setAttributeReleasePolicy(re);service.setName(name);servicesManager.save(service);// 执行load让他生效servicesManager.load();}@GetMapping("/addCas")public void addOAuthClient(@RequestParam("serviceId") String serviceId,@RequestParam("name")String name) {RegexRegisteredService service = new RegexRegisteredService();ReturnAllAttributeReleasePolicy re = new ReturnAllAttributeReleasePolicy();service.setServiceId(serviceId);service.setAttributeReleasePolicy(re);service.setName(name);servicesManager.save(service);// 执行load让他生效servicesManager.load();}@GetMapping("/deleteService")public void deleteServiceClient(@RequestParam("id") String id) {regexregisteredserviceService.removeById(id);// 执行load让他生效servicesManager.load();}

可以看到这个controller中最主要的就是ServicesManager 这个Bean,可以看一下它的源码,这里提供了对于服务操作的实现,这里我们主要用到的是load方法,其作用是当我们增加或删除一个服务后执行load()方法会使我们的修改生效,可以理解为是一个刷新的操作

其中这不分的参数,可以参考  resources.services下的json文件的参数来添加,

注意:添加cas服务使用到的是RegexRegisteredService,添加OAuth2服务使用到的是OAuthRegisteredService,不然数据库里的expression_type是区分不出来类型的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/703500.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络安全防御保护 Day6

深度检测技术 DFI&#xff08;深度包检测技术&#xff09;&#xff1a;主要针对完整的数据包&#xff08;数据包分片&#xff0c;分段需要重组&#xff09;&#xff0c;之后对 数据包的内容进行识别。 DPI&#xff08;深度流检测技术&#xff09;&#xff1a;一种基于流量…

redis雪崩问题

Redis雪崩问题是指在Redis缓存系统中&#xff0c;由于某些原因导致大量缓存数据同时失效或过期&#xff0c;导致所有请求都直接访问数据库&#xff0c;从而引发数据库性能问题甚至宕机的情况。 造成Redis雪崩问题的原因主要有以下几个&#xff1a; 缓存数据同时失效&#xff…

GPIO通用输入输出管脚

GPIO 文章目录 GPIO单片机的工作方式CPU是通过读写寄存器来控制GPIO的GPIO硬件框架 8种模式结构推挽/推挽复用输出模式开漏/开漏复用输出输入结构 单片机是如何访问寄存器的&#xff1f;GPIO输出速度 GPIO,General Purpose lnput Outpu,指的是芯片的通用输入输出管脚。 单片机的…

TLS1.2抓包解析

1.TLS1.2记录层消息解析 Transport Layer SecurityTLSv1.2 Record Layer: Handshake Protocol: Client HelloContent Type: Handshake (22)Version: TLS 1.0 (0x0301)Length: 253Content Type&#xff1a;消息类型&#xff0c;1个字节。 i 0Version&#xff1a;协议版本&…

数据持久化第一课-准备课

数据持久化第一课-准备课 一.预习笔记 1.vs创建控制台项目&#xff08;F5与CTRLF5的区别&#xff09; 2.控制台的输入输出(看看源码) Console.Write( ) Console.WriteLine( ) Console.Read() Console.ReadLine() 3.基本数据类型 值类型&#xff1a;简单类型、结构类型、…

C++指针作函数参数传递

在C中&#xff0c;可以将指针作为函数参数传递&#xff0c;这样可以在函数内部修改指针所指向的值或者实现对指针的操作。这种方法通常用于需要在函数内部修改某个变量的数值&#xff0c;但又不希望通过返回值来实现的情况。 以下是一个简单的例子&#xff0c;演示了如何将指针…

第二代80KM高效远距离传输:100G ZR4光模块的应用与发展

随着信息时代的发展&#xff0c;数据传输的需求日益增长&#xff0c;而光模块作为数据中心和网络基础设施的关键组成部分&#xff0c;其性能和应用范围也在不断扩大。易天光通信的第二代100G ZR4 80KM光模块很好的满足了当代社会通信网络的需求。本文易天光通信将探讨第二代高效…

数学建模【插值与拟合】

一、插值与拟合简介 在数学建模过程中&#xff0c;通常要处理由试验、测量得到的大量数据或一些过于复杂而不便于计算的函数表达式&#xff0c;针对此情况&#xff0c;很自然的想法就是&#xff0c;构造一个简单的函数作为要考察数据或复杂函数的近似。插值和拟合就可以解决这…

快速启动-后台管理系统

目录 Gitee人人开源 后端快速启动 1.clone仓库到本地 2.初始化数据库 3.更改数据库连接 4.启动项目验证 前端快速启动 1.克隆仓库 2.vsCode打开 3.控制台npm install 4.验证测试 时代已然不同&#xff0c;后台管理也可以使用脚手架方式快速启动。 Gitee人人开源 地…

CGLib FastClass机制:动态代理的性能优化之选

确实&#xff0c;CGLib在运行时生成子类并编译这些子类会涉及到一些性能开销。但是&#xff0c;这个开销通常被认为是在可接受的范围内的&#xff0c;因为它是在代理对象创建时发生的&#xff0c;而不是在每次方法调用时。下面是对CGLib使用FastClass机制生成子类的一些解释&am…

京东 h5st 4.1 4.2 4.3 4.4逆向算法分析、API接口、商品详情、价格API接口(2024-02-26)

一、最新京东h5st 4.4逆向 1、h5st 4.4的位置 搜索关键字h5st很快找到&#xff1a; &#xff08;h5st 4.4所在位置&#xff09; 2、签名代码如下&#xff1a; , r JSON.stringify(a), c (new Date).getTime() || "1", d {appid: "pc-item-soa",functio…

洛谷C++简单题小练习day21—梦境数数小程序

day21--梦境数数--2.25 习题概述 题目背景 Bessie 处于半梦半醒的状态。过了一会儿&#xff0c;她意识到她在数数&#xff0c;不能入睡。 题目描述 Bessie 的大脑反应灵敏&#xff0c;仿佛真实地看到了她数过的一个又一个数。她开始注意每一个数码&#xff08;0…9&#x…

短链接的背后故事:为互联网用户带来的便捷与安全

title: 短链接的背后故事&#xff1a;为互联网用户带来的便捷与安全 date: 2024/2/26 14:58:58 updated: 2024/2/26 14:58:58 tags: 短链接技术起源长URL问题解决链接分享便利性链接跟踪与分析链接管理效率提升链接安全保障应用领域广泛 一、短链接的起源 短链接是一种将长UR…

WampServer环境下载安装并结合内网穿透实现远程访问管理界面

文章目录 前言1.WampServer下载安装2.WampServer启动3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 Wamp 是一个 Windows系统下的 Apache PHP Mysql 集成安装环境&#xff0c;是一组常用来…

【前端】一文学懂HTML与CSS选择器基础

文章目录 1. 前言与准备工作1.1 前言1.2 准备工作1.2.1 工具选用1.2.2 VSCode下载与配置 2. 基本概念2.1 通过HelloWorld理解HTML基本概念2.1.1 HTML是什么2.1.2 如何理解"超文本"?2.1.3 HTML基础结构2.1.3 学习第一组标签&#xff1a;段落p与标题h1~h6 2.2 CSS基础…

(202402)多智能体MetaGPT入门1:MetaGPT环境配置

文章目录 前言拉取MetaGPT仓库1 仅仅安装最新版2 拉取源码本地安装MetaGPT安装成果全流程展示 尝试简单使用1 本地部署大模型尝试&#xff08;失败-->成功&#xff09;2 讯飞星火API调用 前言 感谢datawhale组织开源的多智能体学习内容&#xff0c;飞书文档地址在https://d…

大语言模型系列-微调技术

前言 以BERT模型为代表的“预训练语言模型 下游任务微调”训练模式成为了自然语言处理研究和应用的新范式。此处的下游任务微调是基于模型全量参数进行微调&#xff08;全量微调&#xff09;。 以 GPT3 为代表的预训练语言模型&#xff08;PLM&#xff09;参数规模变得越来越…

实习日志30

概要 高拍仪硬件通信原理&#xff0c;WebSocket源码解析&#xff08;JavaScript&#xff09; WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 WebSocket 使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务端主动向客户端推送数据…

【数据库的介绍、分类、作用和特点】的讲解

数据库的介绍、分类、作用和特点 1. 数据库2. 介绍3. 分类3.1 按数据模型分类3.2 按用户数量分类3.3 按数据分布分类 4. 作用5. 特点5.1 特定类型的数据库特点 1. 数据库 数据库是用于存储、管理、处理和检索数据的系统&#xff0c;以下是基于不同维度的数据库的介绍、分类、作…

java RMI(远程方法调用)

java RMI(Remote Method Invocation)远程方法调用。为什么称为远程方法调用呢&#xff1f;因为是两个JVM间进行通讯。两个JVM一个作为服务提供端&#xff0c;另一个作为服务调用端。 首先需要定义一个远程调用的接口&#xff0c;这个接口要继承Remote接口。并且远程接口方法要…