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);
                    }
                }
            }
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何进行H.265视频播放器EasyPlayer.js的中性化设置?

H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器&#xff0c;可支持多种流媒体协议播放&#xff0c;可支持H.264与H.265编码格式&#xff0c;性能稳定、播放流畅&#xff0c;能支持WebSocket-FLV、HTTP-FLV&#xff0c;HLS&#xff08;m3u8&#…

C#用DateAndTime.DateDiff方法和TimeSpan分别计算时间间隔

目录 一、计算时间间隔的方法 1.用DateAndTime.DateDiff方法计算时间间隔 2.使用TimeSpan获取日期时间间隔 二、实例 1.示例一&#xff1a;用DateAndTime.DateDiff方法计算时间间隔 2.示例二&#xff1a;使用TimeSpan获取日期时间间隔 一、计算时间间隔的方法 1.用Date…

深入《羊了个羊》:从0到1的消除游戏开发

一、游戏简介 《羊了个羊》是一款备受欢迎的消除类游戏。玩家需要通过交换相邻的方块&#xff0c;使三个或更多相同方块连成一线&#xff0c;从而将它们消除。消除方块可以获得分数&#xff0c;并在全球排行榜上与其他玩家竞争。 设置项目结构 首先&#xff0c;在文本编辑器中…

【博客搭建记录贴】day4_Hexo基本操作,添加草稿并发布

目录 1.将项目导入到开发环境1.1 先把项目导入到IDEA中1.2 确认IDEA中服务器启动正常 2.Hexo基本操作: 添加草稿并发布2.1 生成一个草稿文件2.2 在页面上查看草稿3.3 将草稿正式发布 1.将项目导入到开发环境 我本地已经安装了 IntelliJ IDEA&#xff08;版本&#xff1a;社区版…

【modelsim使用】数据显示设置

本文介绍modelsim使用中数据的显示设置&#xff0c;定点小数的显示、模拟波形的显示、数据截位查看、信号颜色和行高设置的操作。 文章目录 定点小数显示模拟波形的显示选取信号的某几位组合查看信号颜色与行高设置 定点小数显示 使用modelsim进行仿真时&#xff0c;涉及到定点…

【GitHub项目推荐--一款美观的开源社区系统】【转载】

推荐一款开源社区系统&#xff0c;该系统基于主流的 Java Web 技术栈&#xff0c;如果你是一名 Java 新手掌握了基本 JavaEE 框架知识&#xff0c;可以拿本项目作为练手项目。 开源社区系统功能还算完善包含发布帖子、发布评论、私信、系统通知、点赞、关注、搜索、用户设置、…

【MySQL】内外连接

内外连接 一、内连接二、外连接1、左外连接2、右外连接 表的连接分为内连和外连。 一、内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选。只不过为了让sql的可读性更好&#xff0c;我们使用其他的关键字进行内连接。 语法&#xff1a; SELECT ... FRO…

BGP路由协议通告原则

1仅将自己最优的路由发给BGP邻居 一般情况下,如果BGP Speaker学到去往同一网段的路由多于一条时,只会选择一条最优的路由给自己使用,即用来发布给邻居,同时上送给IP路由表。但是,由于路由器也会选择最优的路由给自己使用,所以BGP Speaker本身选择的最优的路由也不一定被…

简单模拟实现一个线程池

废话不多说之间上代码 import java.util.ArrayList; import java.util.List; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue;public class MyThreadPoolExecutor {private List<Thread> listnew ArrayList<>();pri…

Linux 离线安装Docker(脚本自动安装)

文章目录 1. 准备docker离线包2. 准备docker.service 系统配置文件3. 准备安装脚本和卸载脚本4. 安装5、docker存储 前言 关于服务器不能联网的情况&#xff0c;这样就没法用yum安装软件&#xff0c;docker也是如此&#xff1b;或者由于CentOS系统采用Yum 安装过程中很慢&#…

SpringBootAdmin邮件通知

在上一篇中我们学习到了 Admin Service Clustering 分布式缓存配置 &#xff0c;这一篇我们来学习&#xff0c;客户端离线&#xff0c;出现故障的时候&#xff0c;我们这么能及时知道呢&#xff0c;发现邮件通知也许是最简单的方式了&#xff01; 邮件通知 邮件通知将作为使用…

​在 Linux ​中管理用户

在 Linux 系统中&#xff0c;用户是系统资源的主要使用者&#xff0c;每个用户都有一个唯一的标识符&#xff08;用户ID&#xff09;。为了更好地组织和管理用户&#xff0c;Linux 还引入了用户组的概念。用户组是用户的集合&#xff0c;有助于更有效地分配权限和资源。 用户是…

LabVIEW工业机器人系统

介绍了ABB工业机器人与LabVIEW之间进行数据交互的解决方案。通过使用TCP/IP协议的socket通信&#xff0c;实现了机器人坐标数据的读取&#xff0c;为人机交互提供了一个更便捷、更高效的新思路。 系统主要由ABB工业机器人、基于TCP/IP协议的通信接口和LabVIEW软件组成。工业机…

Excel:将截面数据转换成面板数据

原始截面数据如下&#xff1a; 步骤&#xff1a;数据——自表格/区域 点击确定&#xff0c;出现下图&#xff1a; 然后&#xff0c;在这个界面选择&#xff1a;“转换”——“逆透视列”下选择逆透视其他列。会出现面板数据形式。 然后&#xff0c;点击“主页”——关闭并上载即…

day16打卡

day16打卡 104. 二叉树的最大深度 递归法时间复杂度&#xff1a;O(N)&#xff0c;空间复杂度&#xff1a;O(N) class Solution { public:int maxDepth(TreeNode* root) {if(root nullptr) return 0;return 1 max(maxDepth(root->left), maxDepth(root->right));} };…

Android Settings 显示电池点亮百分比

如题&#xff0c;Android 原生 Settings 里有个 电池电量百分比 的选项&#xff0c;打开后电池电量百分比会显示在状态栏。 基于 Android 13 &#xff0c; 代码在 ./packages/apps/Settings/src/com/android/settings/display/BatteryPercentagePreferenceController.java &am…

springboot125汽车资讯网站

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的125汽车资讯网站 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获…

[AIGC 大数据基础] 浅谈hdfs

HDFS介绍 什么是HDFS&#xff1f; HDFS&#xff08;Hadoop Distributed File System&#xff09;是Apache Hadoop生态系统的一部分&#xff0c;是一个分布式文件系统。它被设计用于存储和处理大规模数据集&#xff0c;并且能够容错、高可靠和高性能地处理文件。 HDFS是为了支…

逻辑回归中的损失函数梯度下降

一、引言 逻辑回归中的损失函数通常采用的是交叉熵损失函数&#xff08;cross-entropy loss function&#xff09;。在逻辑回归中&#xff0c;我们通常使用sigmoid函数将线性模型的输出转换为概率值&#xff0c;然后将这些概率值与实际标签进行比较&#xff0c;从而计算损失。 …

创建第一个 Spring 项目(IDEA社区版)

文章目录 创建 Spring 项目创建一个普通的 Maven 项目添加 Spring 依赖IDEA更换国内源 运行第一个 Spring 项目新建启动类存储 Bean 对象将Bean注册到Spring 获取并使用 Bean 对象 创建 Spring 项目 创建一个普通的 Maven 项目 首先创建一个普通的 Maven 项目 添加 Spring 依…