设计一个填充工具完美解决前后端甩锅的问题了

前后端AES加解密实战:CryptoJS与Java互通解决方案 AES(高级加密标准)是一种广泛使用的对称加密算法,以其速度快、安全性高成为数据加密传输的国际标准。其工作原理基于分组密码,通过固定的块大小处理数据,并依赖加密模式(如CBC)和填充方案(如PKCS7)确保安全。在工程实践中,AES常用于保护敏感信息,如用户密码、身份数据和交易详情,确保其在网络传输或存储过程中的机密性。然而,在不同技术栈间实现AES加解密时,常因默认行为差异导致对接失败,例如前端CryptoJS与后端Java库在密钥编码、输出格式上的不一致。本文聚焦于解决这一常见痛点,提供一套经过实战检验 阅读详情

由来

  • 上面的报表在企业级项目中非常的常见,大数据时代报表统计往往伴随着KPI的评定。所以报表的制作尤为重要。我们就详细看下第一个报表【基础折线图】吧。

  • 想要绘制出这个报表,我们只需要做些横轴纵轴的数据配置即可。但是这里有个要求就是长度上必须对应上。

  • 比如说这种情况当数据为0或者不存在时我们必须给出0这个默认值。这点倒是无所谓或者说也是合情合理。
  • 但是作为Java开发者后端的同志们都明白我们在group by的时候实际上只会统计已经发生的数据。也就是说上图中Tue,Fri这两个横轴的值时不会被统计出来的,这时候就是前后端帅锅的时候了。
  • 前端已数据不全为由要求后端补全提供,而后端则已不宜场景具体化为由拒绝定制化补全数据。
  • 作为后端的我来说肯定是支持后端的观点的。一份数据给到基础结构即可,剩下的应该由客户端自己解析组装。无奈我经历过很多次这样的场景了,所以就自己在此场景下做了一层处理避免以后前后端的火花不断!!!

填充

  • 我们简单总结下就能发现,想要提供一份完美符合前段Echats要求的数据唯一的需要就是数据全。那么首先我们得知道完整的横坐标集合。另外一个重要点就是默认数据应该是啥?

  • 也就是我们需要制定出一系列规范,在Java中接口就是用来规范化的,除此之外我们还得进行数据填充所以这里最终选择抽象类中申明两个方法来表示横轴集合和默认值输出。
 public abstract class DataFill {
     /**
      *  提供默认值
      */
     public abstract Object defaultData();
     /**
      *  全集合记录
      */
     public abstract List<String> keyNameList();
   
     /**
      *  填充数据
      */
     public <T> void fillValue(String fieldName ,String fillName, List<T> list) {
         fillValue(1,fieldName,fillName,list);
     }
   
     /**
      *  最终填充数据业务CODE
      */
     public <T> void fillValue(Integer sameLevel , String fieldName ,String fillName, List<T> list) {
         //TODO
     }
 }
复制代码
  • 其实我们填充的逻辑很简单,我简单的画了个逻辑图

  • 下面我们就针对流程图中的三步进行Code实现。

特殊情况优先处理

 if (list == null) {
   list = new ArrayList<>();
 }
 List<String> newBerthNameList = new ArrayList<>(keyNameList());
 if (CollectionUtils.isEmpty(newBerthNameList)) {
   return;
 }
复制代码
  • 如何本身数据就是空的,那么就没有必要进行一系列判断了,这里也是为了提供性能进行的特殊优化
  • 在平时的数据交互中我总结的大多是三种数据类型。

    • 基础数据
    • JSON或者Map数据
    • Bean数据
  • 首先【基础数据】的传参我觉得并不存在补全数据一说,因为他的载体太过于单一,所以这里基础数据我们就忽略掉了。只考虑后面两种情况。

  • 不管是Json还是Map甚至是Bean,我们最终都是获取指定字段的内容,从而和横坐标集合进行比对的。我这里是分类讨论,聪明的你也可以全部转换为Json处理。

过滤未出现数据

 ​
 for (T item : list) {
   Class<?> itemClass = item.getClass();
   commonClazz = itemClass;
   if (itemClass.isAssignableFrom(JSONObject.class)||itemClass.isAssignableFrom(Map.class)) {
     Map<String, Object> itemMap = (Map<String, Object>) item;
     Object filedObj = itemMap.get(fieldName);
     if (filedObj != null) {
       newBerthNameList.remove(filedObj.toString());
     }
   } else {
     //bean
     try {
       Field field = itemClass.getField(fieldName);
       Object filedObj = field.get(item);
       if (filedObj != null) {
         newBerthNameList.remove(filedObj.toString());
       }
     } catch (IllegalAccessException e) {
       e.printStackTrace();
     } catch (NoSuchFieldException e) {
       e.printStackTrace();
     }
   }
 }
复制代码
  • 上面的代码就是用来筛选出哪些坐标并没有被统计出来

填充默认值

  • 随着流程的推移我们来到了数据填充节点。关于填充我们还得注意一点的是填充在什么位置。

  • 为了兼容更多的场景,所以在填充的方法上我们通过sameLevel字段来标注是否填充在同一级上。否则我们就是在不同层级上。不同级就另外需要指定父级名称。
 if (commonClazz==null||commonClazz.isAssignableFrom(JSONObject.class)||commonClazz.isAssignableFrom(Map.class)) {
   Map<String, Object> map = new HashMap<>();
   map.put(fieldName, berthName);
   //sameLevel=0 表示默认数据需要已同级填充
   if (sameLevel == 0) {
     Map<String,Object> temMap = (Map<String, Object>) defaultData();
     map.putAll(temMap);
   } else {
     map.put(fillName, defaultData());
   }
   list.add((T) map);
 }
复制代码
  • 这里bean的操作也是同样的逻辑,不同点也就是bean需要通过反射来获取内容。这里就不赘述了,最后会将完整代码共享。

使用感受

 public Map<String, Object> groupByField(GroupBean groupBean) {
         List<String> fieldResultList = 获取完整横坐标集合数据;
         DataFill dataFill = new DataFill() {
             @Override
             public Object defaultData() {
                 return 0;
             }
 ​
             @Override
             public List<String> keyNameList() {
                 return fieldResultList;
             }
         };
         //具体的逻辑统计
         List<Map<String,Object>> resultList = selectNameCountGroupByField(groupBean.getTableId(), groupBean.getGroupFieldId());
         //按照name,count统计填充
         dataFill.fillValue("name", "count", resultList);
         Map<String, Object> collect = new HashMap<>();
         for (Map<String, Object> temMap : resultList) {
             String key = ChineseToPY.getInstance().getEnglish(temMap.get("name").toString());
             Object value = temMap.get("count");
             collect.put(key, value);
         }
         return collect;
     }
复制代码

总结

  • 个人感觉这样封装之后,代码使用还是很简洁明了的。加上我们完善的注释之后在部门内分享使用应该问题不大。这个我觉得是基于实际场景衍生出来的个性化工具的创意Idea。还是之前那句话有想法,do it , then success .
前后端数据安全传输:AES+RSA混合加密方案设计与实战 在Web应用开发中,数据传输安全是核心议题。对称加密算法(如AES)以其高效性著称,适合处理大量数据,但其密钥分发存在安全隐患。非对称加密算法(如RSA)则通过公钥/私钥机制完美解决了密钥分发问题,但计算开销大,不适合直接加密海量数据。混合加密技术结合了二者的优势,利用RSA安全地传输AES会话密钥,再使用AES高效加密实际业务数据,从而在安全与性能间取得最佳平衡。这种方案广泛应用于涉及**登录凭证**、**支付信息**等敏感数据交互的场景,是构建安全前后端通信架构的工程实践基石。 阅读详情

相关推荐

AES+RSA混合加密实战:前后端数据安全传输方案详解

在前后端分离架构中,数据传输安全是核心议题。HTTPS保障了传输通道安全,但应用层数据本身仍需额外保护。加密技术分为对称加密与非对称加密:对称加密(如AES)加解密效率高,适合处理大量数据,但存在密钥分发难题;非对称加密(如RSA)通过公钥私钥对解决了密钥分发问题,但计算开销大,不适合加密大数据块。混合加密技术结合了两者优势,先用RSA安全传递会话密钥,再用AES高效加密业务数据,在保障安全性的同时兼顾性能。这种方案尤其适用于金融、政务等对数据保密性要求极高的场景,能有效防护数据在日志记录、内部传输等环节的

weixin_42706667的博客 352

html文本自动填充工具,Repeat Grid批量数据自动填充小工具

我们新开发了一款可以直接在 Adobe XD 中使用虚拟数据填充的插件,参考:《Tdata文本数据填充》Repeat Grid作为Adobe XD最大的亮点,可以瞬间完成重复的设计工作,想详细了解Repeat Grid可以查看 《高效率的Repeat Grid》https://xd.94xy.com/xdjiaocheng/39.html它还支持使用.txt格式的文本数据来批量填充,文本内容如下。...

weixin_39670857的博客 725

Ruoyi-Vue项目RSA迁移国密SM4实战:前后端加解密改造与避坑指南

在软件系统开发中,数据传输安全是保障业务合规与用户隐私的基石。传统的非对称加密算法如RSA,通过公钥加密、私钥解密机制,解决了通信过程中的密钥分发与数据保密问题,广泛应用于登录认证、敏感信息传输等场景。随着国家对信息安全自主可控要求的提升,符合国家商用密码标准的国密算法(如SM2、SM3、SM4)成为金融、政务等关键领域的合规刚需。国密算法在安全性、效率上具有特定优势,其技术价值在于实现自主可控的密码体系,满足等保测评等法规要求。在实际工程实践中,将现有框架中的RSA体系平滑迁移至国密算法,是许多开发者面临

weixin_34241036的博客 465

趣图:代码出问题后相互甩锅

(给程序员的那些事加星标,每天看趣图)"这段代码谁写的""我写的""出现问题了""他写的"↓↓↓往期趣图(点击下方图片可跳转阅读)关注「程序员的那些事」加星标,每天看趣图...

程序员的那些事 720

一小时搭建SpringBoot前后端分离在线考试系统:从零到CRUD实战

在Java Web开发领域,SpringBoot框架因其简化配置和快速启动的特性,已成为构建现代化应用的首选。其核心原理在于通过自动配置和约定大于配置的理念,极大降低了项目初始化的复杂度。结合MyBatis-Plus等持久层框架,开发者能高效实现数据的增删改查(CRUD)操作,这是后端业务逻辑的基石。这种技术组合的价值在于能快速构建出结构清晰、易于维护的后端服务,尤其适用于管理系统、电商平台等需要高效数据操作的应用场景。本文以在线考试管理系统为具体案例,详细演示如何在一小时内,基于SpringBoot和My

weixin_30617797的博客 358

Ubuntu20.04/Debian10安装向日葵远程控制踩坑实录(附依赖问题解决方案)

本文详细介绍了在Ubuntu 20.04/Debian 10系统上安装向日葵远程控制软件的全过程,重点解决了常见的依赖问题,特别是libwebkitgtk相关错误。通过自动修复、手动修改.deb包依赖和使用兼容层三种解决方案,帮助用户顺利完成安装并优化远程控制体验。

silver的专栏 753

后端开发甩锅奥义

在电影《东方不败》里,任我行曾说道:江湖!只要有人,就有恩怨!有恩怨,就有江湖!人就是江湖,你怎么退出啊!"正所谓,人在工位坐,锅从天上来。你在位置上,代码撸的好好的。一个锅就自然而然降临到你身上。因此,身为一名二十一世纪的好开发,如何学会正确的甩锅是在职场生活的必备技能!三奥义 大家要记住三点。甩锅有三大奥义,一定要记住,具体有下面这些!第一奥义:甩锅不能慌很多研发在初学甩锅技巧的时候,由于不善...

Java之间 346

通达信指标DLL加密与一机一码授权实战指南

在软件保护领域,代码混淆与授权管理是核心技术,旨在防止核心算法被逆向工程与非法分发。其原理在于将关键逻辑编译为二进制动态链接库(DLL),实现逻辑黑盒化,并结合硬件指纹生成唯一机器码进行绑定,从而构建一套可控的软件使用授权体系。这项技术的核心价值在于有效保护开发者的知识产权与商业利益,防止策略泄露与盗版泛滥。其典型应用场景包括金融交易策略、商业软件以及各类需要保护核心代码的插件开发。本文聚焦于通达信交易软件,详细阐述了如何通过DLL加密与一机一码绑定技术,为自定义指标公式构建一套安全、可靠的保护方案,解决指

weixin_29327525的博客 289

北妈每日一题:如何甩锅给后端!

一之前的我一直强调,我们应该主动承担责任,这样可以使你快速成长,年轻人一定要主动而又时刻保持热情。但后一句还有:仅限于年轻人!如今,甩锅,绝对是你要修炼的一门技能,如果这...

前端你别闹 1288

关于WPF PasswordBox 增加提示文案,请输入密码,亲测最快方案,改最少的代码!!!

关于WPF PasswordBox 增加提示文案,请输入密码,亲测最快方案,不需要像其他方案改任何PasswordBox的样式,直接加个texbox控件显示隐藏即可1.xaml,注意关键代码,样式之类可以不管 2.xaml.cs

鸣的博客 1545

OceanBase全局索引深度解析:分布式环境下的高效索引设计与实战优化指南

全局索引(Global Index)是OceanBase数据库在分布式环境中提供的一种跨分区、跨服务器的索引结构,它允许用户创建跨越多个分区的索引,为分布式查询提供高效的数据访问路径。与局部索引(Local Index)不同,全局索引不是与表分区一一对应的,而是作为一个独立的逻辑结构存在。 在分布式数据库系统中,全局索引解决了以下几个关键问题: 跨分区查询性能:当查询条件不包含分区键时,全局索引可以避免全表扫描 唯一性约束维护:全局索引能够保证索引键在全局范围内的唯一性 分布式事务支持:全局索引与主表数

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 720

麻雀虽小,样样俱到 | 设计一个填充工具完美解决前后端甩锅的问题了

个人感觉这样封装之后,代码使用还是很简洁明了的。加上我们完善的注释之后在部门内分享使用应该问题不大。这个我觉得是基于实际场景衍生出来的个性化工具的创意Idea。还是之前那句话有想法,do it , then success。...

xhbzl的博客 115

Android P车机添加屏幕多指全局自定义手势操作

参照原生状态栏全局下拉手势拦截,实现屏幕全局多指手势响应操作,并对手势进行转换为KeyEvent,以便项目自定义手势行为或应用拦截手势行为。

shusuanly的博客 1254

前后端分离技术+跨域问题+Idea集成svn

前后端分离技术+跨域问题+Idea集成svn 1.前后端分离技术 1.1:什么是前后端分离? 前后端分离是一种架构模式,前后端项目分开开发,测试,部署. 并行开发:前后端并行开发,测试,再联调. 一个人做 … 后端先行:后端先开发好接口,前端使用真是数据,省去写mock过程。 1.2:前后端分离的优势: (1)为优质产品打造精益团队 (2)提升开发效率 (3)完美应对复杂多变的前端需求 (4)增...

z583248756的博客 463

Vue - 萤石云监控 ezuikit 视频实例销毁方案,解决使用stop方法无法销毁EZUIKit实例或销毁后依然占用内存并且监控画面依然有声音问题(解决页面多个监控摄像头画面同时播放,翻页或关闭页

vue2,vue3,萤石,监控摄像头,萤石云销毁视频实例,退出页面销毁,stop销毁原视频流,占用内存怎么办,销毁后视频依旧在后台播放有声音,销毁视频播放器,页面上有多个视频画面怎么销毁某一个,stop方法不生效怎么办,浏览器非常卡,dom销毁,ezuikit-js萤石云播放器Vue中使用beforeDestory销毁播放器实例,调用萤石云ezuikit-js的视频对象销毁,vue使用萤石云监控视频录像回放,不销毁实例会出现离开页面后依旧有监控声音并且占内存问题,不好使,页面崩了,崩溃,视频监控太多,没有用

🏆 前端领域优质创作者 1万+

分子动力学仿真软件:LAMMPS_(16).应用案例分析

通过以上四个应用案例,我们详细介绍了如何使用LAMMPS进行不同系统的分子动力学仿真。从简单的液体水仿真到复杂的纳米管仿真,每个案例都包含了详细的步骤说明和代码示例。读者可以通过这些示例实际操作并验证结果,从而更好地理解LAMMPS的功能和使用方法。希望这些案例能够为读者在分子动力学仿真领域的研究和应用提供帮助。

kkchenjj的博客 840

AI 辅助开发实战:高效构建前后端分离的网站毕业设计

通过这次实践,我深刻感受到 AI 辅助开发不是替代,而是增强。它将我们从重复劳动中解放,让我们能更聚焦于架构设计、业务逻辑和异常处理这些真正体现开发者价值的地方。给你的挑战:找一个你现有毕业设计中最枯燥、最模式化的模块,比如“用户管理”或“数据看板”。用 OpenAPI 定义这个模块的接口。使用 AI 工具,根据规范分别生成后端 Controller/Service 和前端的请求代码。对比你手写的旧代码和 AI 生成的新代码,思考在风格、完整性和规范性上的差异。AI 生成代码的可维护边界在哪里?

2600_94960048的博客 289

(考研湖科大教书匠计算机网络)第四章网络层-第三节3、4:划分子网的IPv4地址和无分类IP地址

子网掩码: 32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号子网掩码使用连续的比特1来对应网络号和子网号子网掩码使用连续的比特0来对应主机号将划分子网的IPv4地址与其相应的子网掩码进行逻辑与运算就可得到IPv4地址所在子网的网络地址如下图。

快乐江湖的博客 1351

nginx+tomcat前后端分离_我们公司的前后端分离(二)

在前后端分离的实际操作中。,后端仅返回前端所需的数据,不在渲染前端页面,不再参与前端的效果, 开发者权重偏向于前端逻辑。也就是说,用户看到什么样的效果,从后端请求的数据如何加载到前端中,都由前端自己决定,后端仅仅需要提供一套逻辑对外提供数据即可,并且前端与后端的耦合度相对较低,将后端开发的每个视图都成为一个接口,或者API,前端通过访问接口来对数据进行增删改查。减轻服务器的负荷。 我们对后端的要求...

weixin_39678531的博客 384

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

手把手教你实现前后端RSA加密通信:Python和JS的完美配合

本文提供了一套完整的前后端RSA加密通信实战指南。针对JS前端,详细介绍了如何使用jsencrypt库进行数据加密;针对Python后端,则讲解了如何利用PyCryptodome进行解密。文章从密钥生成、代码实现到生产环境部署,手把手教你构建安全的数据传输通道,并强调了结合HTTPS的重要性。

f0g1h2的博客 786

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SpringBoot+Vue前后端RSA加密实战:从密钥生成到登录安全全流程

本文详细介绍了在SpringBoot与Vue前后端分离项目中,如何完整实现RSA非对称加密以保障登录安全。内容涵盖从密钥对的生成与管理、前后端加解密协同、PEM格式处理到常见问题排查的全流程实战,为开发者提供了一套可落地的安全通信方案,有效防止敏感信息在传输过程中泄露。

gray5的博客 442

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Pixel Couplet Gen参数详解:LLM输出字段捕获容错机制与自动填充逻辑

本文介绍了如何在星图GPU平台上自动化部署🎮 像素皇城 · 灵蛇贺岁 (Pixel Couplet Gen)镜像,实现AI创意春联生成功能。该镜像基于ModelScope大模型,具备LLM输出解析容错机制与自动填充逻辑,特别适用于春节主题的像素风格春联创作,可广泛应用于节日贺卡设计、社交媒体内容生成等场景。

weixin_32747681的博客 897

跨境电商如何利用sms-activate解决国际短信验证问题

最近在开发一个跨境电商平台时,遇到了国际短信验证码接收的难题。注册国际服务时,往往需要本地手机号接收验证码,这对跨境电商来说是个大麻烦。经过一番调研和实践,我找到了一个不错的解决方案——集成sms-activate API,下面分享下我的实战经验。平台提供的一键部署功能让我可以快速将前后端应用上线测试,省去了繁琐的环境配置。特别是对于需要持续运行的Node.js服务,部署过程异常简单,只需要点击几下就能让应用跑起来。整个解决方案从构思到上线只用了不到一周时间,这在传统开发流程中是不可想象的。

SilverfoxOwl19的博客 552

数据库课程设计案例:基于CasRel模型的关系型数据自动填充系统

本文介绍了如何利用星图GPU平台,自动化部署CasRel关系抽取模型,构建一个智能数据填充系统。该系统能够自动从非结构化文本(如公司报告)中抽取实体关系,并高效、准确地填充到关系型数据库中,实现企业知识库的自动化构建与更新。

weixin_29092787的博客 39
上一篇: 看三年的CRUD程序员如何解决数据库死锁的
下一篇: 面试官:请说说什么是BFC?大白话讲清楚
程序员职业指南
博客等级 码龄4年 2139粉丝 960原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值