JRT的无源码发布

之前介绍过JRT最大的特点就是业务脚本化。老javaer就会说你业务代码都在发布环境放着,那怎么代码保密,在发布环境别人随便改了启不是不安全,或者一些代码我就是不想让人看源码呢。

其实JRT的业务脚本化只是特性,不是代表就必须要放源码才能运行。能否运行和有没有源码是没有关系的。源码放着只是保证修改和维护的,你可以为了修改维护方便放源码,也可以为了安全或者不让随意改不放源码。

首先JRT提供一个编译所有业务代码的脚步,浏览器访问就能编译所有业务脚本到jar,当然如果你把所有后台都执行到也不用执行这个全编译脚本,这个只是为了保证全。
在这里插入图片描述
调用脚本
在这里插入图片描述
有jar之后就可以删任意业务java代码了
在这里插入图片描述

删除代码之后不会影响程序执行,这就是JRT的另一面特性
在这里插入图片描述

全编译脚本,就是把所有的业务类都获取一遍

import JRT.Core.MultiPlatform.JRTContext;
import JRTBLLBase.BaseHttpHandlerNoSession;
import JRTBLLBase.GetBllObjService;import java.io.File;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;/*** 编译所有的业务类,编译完成后可以删除业务的.java源码使用,在有些时候不想让人看到发布的源码看*/
public class JRTBuild extends BaseHttpHandlerNoSession {/*** 扫描所有业务脚本编译,使JRT的发布可以删除任何业务代码使用* @return*/public String Do(){List<String> exts = new ArrayList<>();exts.add("java");//找到所有的代码文件List<File> files = GetAllPerFileInfo(JRTContext.WebBasePath, exts, "");int num=0;//循环编译每个java代码for(File f:files){String compressedPath = f.getAbsolutePath();//临时目录退出if (compressedPath.contains("AutoBuildTmp")) {continue;}//实体目录退出if (compressedPath.contains("CompileModel")) {continue;}//不编译自己if(f.getName().equals("JRTBuild.java")&&f.getParent().equals("jrtscript")){continue;}System.out.println("编译:" + f.getAbsolutePath());String confStr = compressedPath.replace(JRTContext.WebBasePath, "").replace("\\", "/").split("\\.")[0];try {num++;GetBllObjService.GetObjectByConfString(confStr, null, "", compressedPath);} catch (Exception ex) {ex.printStackTrace();}}return "编译完成,共编译:"+num+"个,所有.java代码已经生成BinAshx,可以删除任意业务.java运行";}/*** 得到目标文件** @param directory* @param extensionList* @param regex* @return*/private static List<File> GetAllPerFileInfo(String directory, List<String> extensionList, String regex) {List<File> paths = new ArrayList<>();File dir = new File(directory);if (!dir.exists()) {// 目录不存在return paths;} else {SeeFile(new File(directory), extensionList, paths, regex);}return paths;}/*** 扫描文件** @param dir           目录* @param extensionList 后缀* @param paths         路径* @param regex         正则*/private static void SeeFile(File dir, List<String> extensionList, List<File> paths, String regex) {File[] files = dir.listFiles();if (files != null) {for (File file : files) {if (file.isDirectory()) {SeeFile(file, extensionList, paths, regex);} else {if (regex != null && !regex.isEmpty()) {if (Pattern.matches(regex, file.getName())) {paths.add(file);}} else if (extensionList != null) {String fileName = file.getName();String fileExtension = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();if (extensionList.contains(fileExtension)) {paths.add(file);}} else {paths.add(file);}}}}}
}

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

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

相关文章

选择排序(堆排序和topK问题)

选择排序 每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的数据元素排完 。 如果我们用扑克牌来举例&#xff0c;那么选择排序就像是提前已经把所有牌都摸完了&#xff0c;而再进行牌…

git commit 描述如何修改

git Commit 描述写错了&#xff0c;如何修改_git提交描述错误怎么修改-CSDN博客 1.git commit --amend 2.按一下 i 键&#xff0c;进入插入模式 3.修改成描述 4.按 esc 键退出&#xff0c;然后按shift:&#xff0c;然后输入 wq 就完成修改了

ROS1工作空间内多个包先后编译顺序、包内编译顺序

在ros工作空间里有packageA和packageB两个包&#xff0c;其中第二个包依赖第一个包。除了packageB的CMakeLists.txt中的find_package要加入第一个包外&#xff0c;还需要修改package.xml&#xff0c;保证catkin_make的编译顺序&#xff1a; packageB的package.xml&#xff1a;…

Java中文乱码浅析及解决方案

Java中文乱码浅析及解决方案 一、GBK和UTF-8编码方式二、idea和eclipse的默认编码方式三、解码和编码方法四、代码实现编码解码 五、额外知识扩展 一、GBK和UTF-8编码方式 如果采用的是UTF-8的编码方式&#xff0c;那么1个英文字母 占 1个字节&#xff0c;1个中文占3个字节如果…

list的介绍及其模拟实现

今天我们了解list&#xff0c;list在python中是列表的意思 &#xff0c;但是在C中它是一个带头双向循环链表&#xff1a; list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。list的底层是双向链表结构&#xf…

springboot项目快速引入knife4j

引入依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.3</version> </dependency>knife4j配置文件 basePackage改为自己存放接口的包名 /*** Kn…

【网络安全 | 漏洞挖掘 】Firefox长达21年的 “陈年老bug”,终于被修复了!

Firefox 的工单记录页面显示&#xff0c;一个在 21 年前发现的 bug 终于被修复了。 根据描述&#xff0c;具体错误是表格单元格无法正确处理内容 “溢出” 的情况&#xff0c;不支持 ‘hidden’、‘auto’ 和’scroll’ 属性。 如下图所示&#xff1a; 开发者在评论中指出&a…

如何使用Stable Diffusion的ReActor换脸插件

ReActor插件是从roop插件分叉而来的一个更轻便、安装更简单的换脸插件。操作简单&#xff0c;非常容易上手&#xff0c;下面我们就介绍一下&#xff0c;如何将ReActor作为stable diffusion的插件进行安装和使用。 一&#xff1a;安装ReActor插件 项目地址&#xff1a;https:/…

计算机网络——网络层(1)

计算机网络——网络层(1&#xff09; 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU) 网络层&#xff1a;数据平面网络层概述核心功能协议总结 路由器工作原理路由器的工作步骤总结 网际协议IPv4主要特点不足IPv6主要特点现状 通用转发和SDN通用转发SDN&#xff08;软件…

C++从零开始的打怪升级之路(day21)

这是关于一个普通双非本科大一学生的C的学习记录贴 在此前&#xff0c;我学了一点点C语言还有简单的数据结构&#xff0c;如果有小伙伴想和我一起学习的&#xff0c;可以私信我交流分享学习资料 那么开启正题 今天分享的是关于vector的题目 1.删除有序数组中的重复项 26. …

前端[新手引导动画]效果:intro.js

目录 一、安装 二、配置 三、编写需要引导动画的页面 四、添加引导效果 一、安装 npm i intro.js 二、配置 详细配置可以参考&#xff0c;官网&#xff1a; Intro.js Documentation | Intro.js Docs https://introjs.com/docs 新建一个intro.js的文件&#xff1a; 三、…

扎哇面试准备

1.你是谁&#xff1f; 我是李四&#xff0c;24 届学生&#xff0c;目前就读于西安电子科技大学&#xff0c;硕士学历&#xff0c;就读的专业是软件工程&#xff08;非软件相关专业就不要介绍你的专业了&#xff09;&#xff0c;很荣幸参加贵公司的面试 2.你会啥&#xff1f; …

06.Elasticsearch应用(六)

Elasticsearch应用&#xff08;六&#xff09; 1.什么是分词器 ES文档的数据拆分成一个个有完整含义的关键词&#xff0c;并将关键词与文档对应&#xff0c;这样就可以通过关键词查询文档。要想正确的分词&#xff0c;需要选择合适的分词器 2.ES中的默认分词器 fingerprint…

MySQL的`FOR UPDATE`详解

MySQL的FOR UPDATE详解 欢迎阅读本博客&#xff0c;今天我们将深入探讨MySQL中的FOR UPDATE语句&#xff0c;它用于在事务中锁定选择的数据行&#xff0c;确保在事务结束前其他事务无法修改这些数据。 1. FOR UPDATE基础 FOR UPDATE是用于SELECT语句的一种选项&#xff0c;它…

15- OpenCV:模板匹配(cv::matchTemplate)

目录 1、模板匹配介绍 2、cv::matchTemplate 3、模板匹配的方法&#xff08;算法&#xff09; 4、代码演示 1、模板匹配介绍 模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域。 它可以在一幅图像中寻找与给定模板最相似的部分。 模板匹配的步骤&#xff1a; &a…

C++提高编程——STL:常用算法

本专栏记录C学习过程包括C基础以及数据结构和算法&#xff0c;其中第一部分计划时间一个月&#xff0c;主要跟着黑马视频教程&#xff0c;学习路线如下&#xff0c;不定时更新&#xff0c;欢迎关注。 当前章节处于&#xff1a; ---------第1阶段-C基础入门 ---------第2阶段实战…

Unity中URP下计算额外灯的方向

文章目录 前言一、为什么额外灯的方向&#xff0c;不像主平行灯一样直接获取&#xff1f;1、主平行灯2、额外灯中&#xff0c;包含 点光源、聚光灯 和 平行灯 二、获得模型顶点指向额外灯的单位向量三、Unity中的实现 前言 在上一篇文章中&#xff0c;我们获取了URP下额外灯的…

Springboot 使用Redis中ZSetOperations实现博客访问量功能

Springboot 使用Redis中ZSetOperations实现博客访问量功能 1.在application.yml中Redis配置信息 spring:redis:host: 127.0.0.1port: 6379password: 123456782.在pom.xml中加载依赖 <dependency><groupId>org.springframework.boot</groupId><artifact…

06-枚举和模式匹配

上一篇&#xff1a;05-使用结构体构建相关数据 在本章中&#xff0c;我们将介绍枚举。枚举允许你通过枚举其可能的变体来定义一种类型。首先&#xff0c;我们将定义并使用一个枚举&#xff0c;以展示枚举如何与数据一起编码意义。接下来&#xff0c;我们将探索一个特别有用的枚…

eNSP学习——交换机配置Trunk接口

目录 原理概述 实验内容 实验目的 实验步骤 实验拓扑 实验编址&#xff1a; 试验步骤 基本配置 创建VLAN&#xff0c;配置Access接口 配置Trunk接口 思考题 原理概述 在以太网中&#xff0c;通过划分VLAN来隔离广播域和增强网络通信的安全性。以太网通常由多台交换机组…