当前位置: 首页 > news >正文

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是区分不出来类型的

相关文章:

  • ThinkPHP6中使用GatewayWorker
  • AI新纪元:可能的盈利之道
  • QT3作业
  • pikachu靶场-File Inclusion
  • C语言--贪吃蛇
  • [LWC] Components Communication
  • 2023 最新 IntelliJ IDEA 2023.3 详细配置步骤演示(图文版)<中文版>
  • 数字签名在游戏里的应用
  • 如何实现多账户管理?海外代理IP推荐
  • 【2024.02.22】定时执行专家 V7.0 发布 - TimingExecutor V7.0 Release - 龙年春节重大更新版本
  • 多维时序 | Matlab实现基于VMD-DBO-GRU、VMD-GRU、GRU的多变量时间序列预测
  • 【PostgreSQL】PostgreSQL详细介绍
  • 怎么才能快速准确地全面地了解一个陌生的行业?
  • matlab经验模式分解的R波检测算法
  • 图像压缩感知的MATLAB实现(OMP)
  • 30天自制操作系统-2
  • Bytom交易说明(账户管理模式)
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • node 版本过低
  • Odoo domain写法及运用
  • 第十八天-企业应用架构模式-基本模式
  • 关于extract.autodesk.io的一些说明
  • 利用DataURL技术在网页上显示图片
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 用element的upload组件实现多图片上传和压缩
  • elasticsearch-head插件安装
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • #Spring-boot高级
  • #单片机(TB6600驱动42步进电机)
  • (分布式缓存)Redis哨兵
  • (新)网络工程师考点串讲与真题详解
  • (一)SpringBoot3---尚硅谷总结
  • (一)WLAN定义和基本架构转
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .bat批处理出现中文乱码的情况
  • .net core控制台应用程序初识
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • @Async注解的坑,小心
  • @SuppressWarnings(unchecked)代码的作用
  • [ C++ ] STL---string类的模拟实现
  • [AutoSAR系列] 1.3 AutoSar 架构
  • [Big Data - Kafka] kafka学习笔记:知识点整理
  • [BZOJ2281][SDOI2011]黑白棋(K-Nim博弈)
  • [Docker]五.Docker中Dockerfile详解
  • [Hibernate] - Fetching strategies
  • [IE编程] WebBrowser控件的多页面浏览(Tabbed Browsing)开发接口
  • [kubernetes]控制平面ETCD
  • [LeetCode]-Pascal's Triangle III 杨辉三角问题
  • [Linux] 用LNMP网站框架搭建论坛
  • [Linux版本Debian系统]安装cuda 和对应的cudnn以cuda 12.0为例
  • [Neural Network] {Université de Sherbrooke} L2.9 Param Initialization