聊聊PowerJob的AppInfoController

本文主要研究一下PowerJob的AppInfoController

AppInfoController

tech/powerjob/server/web/controller/AppInfoController.java

@RestController
@RequestMapping("/appInfo")
@RequiredArgsConstructor
public class AppInfoController {private final AppInfoService appInfoService;private final AppInfoRepository appInfoRepository;private static final int MAX_APP_NUM = 200;@PostMapping("/save")public ResultDTO<Void> saveAppInfo(@RequestBody ModifyAppInfoRequest req) {req.valid();AppInfoDO appInfoDO;Long id = req.getId();if (id == null) {appInfoDO = new AppInfoDO();appInfoDO.setGmtCreate(new Date());}else {appInfoDO = appInfoRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("can't find appInfo by id:" + id));// 对比密码if (!Objects.equals(req.getOldPassword(), appInfoDO.getPassword())) {throw new PowerJobException("The password is incorrect.");}}BeanUtils.copyProperties(req, appInfoDO);appInfoDO.setGmtModified(new Date());appInfoRepository.saveAndFlush(appInfoDO);return ResultDTO.success(null);}@PostMapping("/assert")public ResultDTO<Long> assertApp(@RequestBody AppAssertRequest request) {return ResultDTO.success(appInfoService.assertApp(request.getAppName(), request.getPassword()));}@GetMapping("/delete")public ResultDTO<Void> deleteAppInfo(Long appId) {appInfoRepository.deleteById(appId);return ResultDTO.success(null);}@GetMapping("/list")public ResultDTO<List<AppInfoVO>> listAppInfo(@RequestParam(required = false) String condition) {List<AppInfoDO> result;Pageable limit = PageRequest.of(0, MAX_APP_NUM);if (StringUtils.isEmpty(condition)) {result = appInfoRepository.findAll(limit).getContent();}else {result = appInfoRepository.findByAppNameLike("%" + condition + "%", limit).getContent();}return ResultDTO.success(convert(result));}private static List<AppInfoVO> convert(List<AppInfoDO> data) {if (CollectionUtils.isEmpty(data)) {return Lists.newLinkedList();}return data.stream().map(appInfoDO -> {AppInfoVO appInfoVO = new AppInfoVO();BeanUtils.copyProperties(appInfoDO, appInfoVO);return appInfoVO;}).collect(Collectors.toList());}@Dataprivate static class AppInfoVO {private Long id;private String appName;}}

AppInfoController提供了save、assert、delete、list方法

AppInfoService

tech/powerjob/server/core/service/AppInfoService.java

public interface AppInfoService {Long assertApp(String appName, String password);
}

AppInfoService定义了assertApp方法

AppInfoServiceImpl

tech/powerjob/server/core/service/impl/AppInfoServiceImpl.java

@Service
@RequiredArgsConstructor
public class AppInfoServiceImpl implements AppInfoService {private final AppInfoRepository appInfoRepository;/*** 验证应用访问权限* @param appName 应用名称* @param password 密码* @return 应用ID*/@Overridepublic Long assertApp(String appName, String password) {AppInfoDO appInfo = appInfoRepository.findByAppName(appName).orElseThrow(() -> new PowerJobException("can't find appInfo by appName: " + appName));if (Objects.equals(appInfo.getPassword(), password)) {return appInfo.getId();}throw new PowerJobException("password error!");}
}

AppInfoServiceImpl实现了AppInfoService接口,其assertApp是根据appName找到AppInfoDO,然后对比password是否一致

小结

PowerJob的AppInfoController提供了注册、验证等接口,其中assert接口调用的是AppInfoService的assertApp方法,它根据appName找到AppInfoDO,然后对比password是否一致。

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

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

相关文章

SpringBoot过滤器获取请求的参数

一、背景 在项目开发过程中&#xff0c;需要对于某些接口统一处理。 这时候就需要获取请求的报文&#xff0c;再对获取的报文进行统一处理。 二、了解过滤器 首先了解一下过滤器拦截器的区别&#xff1a; JAVA中的拦截器、过滤器&#xff1a;https://blog.csdn.net/qq_38254…

‘javax.sql.DataSource‘ that could not be found的问题

报错信息如下&#xff1a; 2024-02-04 16:31:14.832 WARN 952 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDepen…

Leetcode—38. 外观数列【中等】

2024每日刷题&#xff08;111&#xff09; Leetcode—38. 外观数列 实现代码 class Solution { public:string countAndSay(int n) {string ans "1";while(--n) {string next;for(int i 0; i < ans.size(); i) {int cnt 1;char c ans[i];while(i 1 < an…

如何提高webpack构建速度以及优化前端性能

一.提高构建速度 1.多⼊⼝情况下&#xff0c;使⽤ CommonsChunkPlugin 来提取公共代码 2.通过 externals 配置来提取常⽤库 3.利⽤ DllPlugin 和 DllReferencePlugin 预编译资源模块 通过 DllPlugin 来对那些我们引⽤但是绝对不会修改的 npm 包来进⾏预 编译&#xff0c;再通过…

使用HTML、CSS和JavaScript来创建一个粒子效果,粒子会跟随鼠标点击位置生成

文章目录 一、粒子效果二、JavaScript三、HTML四、CSS五、热门文章 一、粒子效果 以下是一个简单的示例&#xff0c;使用HTML、CSS和JavaScript来创建一个粒子效果&#xff0c;粒子会跟随鼠标点击位置生成&#xff1a; <!DOCTYPE html> <html> <head><t…

【算法与数据结构】647、516、LeetCode回文子串+最长回文子序列

文章目录 一、647、回文子串二、516、最长回文子序列三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、647、回文子串 思路分析&#xff1a;判断一个字符串是否为回文串那么必须确定回文串的所在区间&#xff0c;而一维…

【RK3288 Android6 T8, 突然无声音问题排查】

文章目录 【RK3288 Android6 T8, 突然无声音问题排查】问题描述问题调查patch【RK3288 Android6 T8, 突然无声音问题排查】 问题描述 页面上方突然出现音量进度条,小铃铛图标显示静音状态,不再播报语音 手动去安卓设置内查看,小铃铛音量为0,手动恢复到有声音后继续执行…

Redis -- set集合

挑战自己&#xff0c;每天进步一点点&#xff0c;成就将属于不停止脚步的你。 目录 Redis集合&#xff1f; 集合基本命令 sadd smembers sismember scard spop srandmember smove srem 集合间操作 sinter sinterstore sunion sdiff sdiifstore Redis集合&#…

【Linux】EXT2文件系统 | 磁盘分区块组 | inode

文章目录 一、前言二、EXT2文件系统 - 逻辑存储结构&#x1f4be;分区&#xff08;Partition&#xff09;分区的概念每个分区的内容Linux下查询磁盘分区 &#x1f4be;块组&#xff08;Block Group&#xff09;磁盘格式化每个块组的内容1. Superblock&#xff08;超级块&#x…

106 C++ STL 标准模版库大局观,重要概念

一 C标准库 C standard Library。 只要你装了C编译器&#xff0c;那么这个 C标准库就会被自动的安装进来了。 为什么要装进来这个呢&#xff1f;主要是为了解决可复用问题。 C标准库给我们提供了大量的成熟的可使用的功能。因此用好 标准库&#xff0c;是一个合格的C程序员的…

【Delphi 基础知识 28】ListView控件的详细使用

文章目录 控件设置增加数据删除选中的行按标题删除读取某行某列内容修改某行某列内容清空内容设置焦点上下移动条目读出选中行信息点击正反排序每行item显示不一样的颜色 控件设置 ViewStyle 设为vsReportReadOnly 设为TrueGridLines 设为TrueRowSelect 设为True 增加数据 …

《Redis核心技术与实战》学习笔记0——开篇词 | 这样学Redis,才能技高一筹

开篇词 | 这样学Redis&#xff0c;才能技高一筹 文章目录 开篇词 | 这样学Redis&#xff0c;才能技高一筹为什么懂得了一个个技术点&#xff0c;却依然用不好 Redis&#xff1f; 作为键值数据库&#xff0c;Redis 的应用非常广泛&#xff0c;如果你是后端工程师&#xff0c;我猜…

Kubernetes的有状态应用示例:使用StatefulSet部署Cassandra

文章目录 环境概述准备为Cassandra创建headless service验证Cassandra StatefulSet修改Cassandra StatefulSet清理Cassandra容器环境变量参考 环境 RHEL 9.3Docker Community 24.0.7minikube v1.32.0 概述 本例展示了如何在Kubernetes上运行Apache Cassandra。Cassandra是一…

RCS-YOLO复现

复现结果–Precision&#xff1a;0.941&#xff0c;Recall&#xff1a;0.945&#xff0c;AP 50 _{50} 50​&#xff1a;0.941&#xff0c;AP 50 : 95 _{50:95} 50:95​&#xff1a;0.693&#xff0c;误差在5个点内&#xff0c;可以接受 感想 第5篇完全复现的论文

Palworld幻兽帕鲁自建服务器32人联机开黑!

玩转幻兽帕鲁服务器&#xff0c;阿里云推出新手0基础一键部署幻兽帕鲁服务器教程&#xff0c;傻瓜式一键部署&#xff0c;3分钟即可成功创建一台Palworld专属服务器&#xff0c;成本仅需26元&#xff0c;阿里云服务器网aliyunfuwuqi.com分享2024年新版基于阿里云搭建幻兽帕鲁服…

如何做餐饮业满意度调研

餐饮满意度调研是一种评估顾客对餐厅服务、菜品口感、环境和服务等方面满意度的重要手段。随着餐饮市场竞争的日益激烈&#xff0c;顾客满意度成为了餐饮企业竞争力的重要指标之一。通过这种调研&#xff0c;餐厅可以了解顾客的需求和期望&#xff0c;从而改进服务质量&#xf…

「Kafka」消费者篇

「Kafka」消费者篇 Kafka 消费方式 Kafka 消费者工作流程 消费者总体工作流程 新版本&#xff08;0.9之后&#xff09;的 offset 保存在 kafka 的 Topic 里&#xff0c;持久化到磁盘&#xff0c;可靠性有保障。 老版本&#xff08;0.9之前&#xff09;的 offset 保存在 Zook…

docker 离线安装镜像

一、导出镜像 下载完镜像后&#xff0c;我们需要将其导出为tar文件&#xff0c;以便在离线环境中使用。 执行以下命令导出镜像&#xff1a; docker save -o <保存路径>/<镜像名>_<版本>.tar <镜像名>:<版本>其中&#xff0c;<保存路径>是…

uniapp中配置开发环境和生产环境

uniapp在开发的时候&#xff0c;可以配置多种环境&#xff0c;用于自动切换IP地址&#xff0c;用HBuilder X直接运行的就是开发环境&#xff0c;用HBuilder X发布出来的&#xff0c;就是生产环境。 1.使用HBuilder X创建原生的uniapp程序 选择vue3 2.什么都不改&#xff0c;就…

机器学习复习(8)——基本概念

目录 "benchmark"和"baseline"的定义和区别 R1 score概念 LoRA微调概念 "benchmark"和"baseline"的定义和区别 在计算机视觉领域的论文中&#xff0c;"benchmark"和"baseline"这两个术语经常被使用&#xff0…