我在找一个替代的方法 %%__USER__%% 字符串,然后让用户下载它。我没有任何代码可以共享,因为这只是理论上的,我不知道从哪里开始。我不知道有什么方法可以实现,可能是通过字节码?任何帮助都将不胜感激。更多信息:文件已经编译并存储在web服务器上。它们由社区成员上传 %%__USER__%% 代码将用于跟踪许可证分析。需要将此代码更改为每次下载文件时都下载用户的代码。
%%__USER__%%
oewdyzsn1#
jar文件基本上只是一个zip文件。要实时更新jar文件中的文件(用户正在下载),可以使用 ZipInputStream 以及 ZipOutputStream .例子:
ZipInputStream
ZipOutputStream
response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=\"foo.jar\""); try ( ZipInputStream in = new ZipInputStream(this.getClass().getResourceAsStream("template.jar")); ZipOutputStream out = new ZipOutputStream(response.getOutputStream()); ) { for (ZipEntry zipEntry; (zipEntry = in.getNextEntry()) != null; ) { out.putNextEntry(new ZipEntry(zipEntry.getName())); if (zipEntry.getName().equals("special.txt")) { copySpecial(in, out); } else { copyStream(in, out); // doesn't close streams } } }
static void copySpecial(InputStream in, OutputStream out) { BufferedReader reader = new BufferedReader(new InputStreamReader(in)); PrintWriter writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(out))); for (String line; (line = reader.readLine()) != null; ) { line = line.replace("%%__USER__%%", "John Doe"); writer.println(line); } writer.flush(); // Don't close reader/writer }
fdx2calv2#
可能(假设您希望/需要更改现有类中的字符串):提取罐用javassist或者bytebuddy读取并修改类文件?我没有这样做,但这个答案似乎暗示这是可能的。又是zip/jar(如果签署了,你可能不得不辞职)
2条答案
按热度按时间oewdyzsn1#
jar文件基本上只是一个zip文件。要实时更新jar文件中的文件(用户正在下载),可以使用
ZipInputStream
以及ZipOutputStream
.例子:
fdx2calv2#
可能(假设您希望/需要更改现有类中的字符串):
提取罐
用javassist或者bytebuddy读取并修改类文件?我没有这样做,但这个答案似乎暗示这是可能的。
又是zip/jar(如果签署了,你可能不得不辞职)