如何用java中的RSA密钥加密解密

我需要用openssl生成的rsaprivatekey.pem和rsapublickey.pem密钥替换从Unix到java代码的加密和解密步骤 我生成了密钥 openssl genrsa -out /tmp/rsaprivatekey.pem -des3 1024 openssl rsa -in /tmp/rsaprivatekey.pem -pubout -out /tmp/rsapublickey.pem 我在unix中使用键(我需要在java中执行) echo “Text to encript”| openssl rsautl -encrypt -inkey /tmp/rsapublickey.pem -pubin -out out.enc openssl rsautl -decrypt -inkey /tmp/rsaprivatekey.pem -in out.enc 这是我尝试这样做的 public static void main(String[] args) { Base64 base64 = new Base64(); String TextStream = “this is the input text”; […]

如何避免请求设置ASYNC_SUPPORTED = true以在Tomcat 7上启用异步servlet 3.0处理?

在报告此问题后 ,找到了一个解决方案: req.setAttribute(“org.apache.catalina.ASYNC_SUPPORTED”, true); 这看起来有点奇怪,并不是真正的“便携式”代码(它不会受到伤害,但……)。 它似乎特定于Tomcat 7.我使用的是NetBeans 7.0.1提供的Tomcat 7.0.14。 我找不到文档,表明有必要在servlet 3.0中使用catalina属性启用异步请求处理。 我找不到文档,表明在Tomcat配置级别也需要特殊的东西。 有没有办法避免在每个请求中设置ASYNC_SUPPORTED=true以在Tomcat 7中启用异步servlet 3.0处理?

使用Java从HTTPS服务器下载文件

我想从使用安全连接协议HTTPS的服务器下载文件。 我可以在普通服务器上做,但是,我怎么能用HTTPS做到这一点。 如果有人使用过示例API,请帮助我找到有用的资源。

内存完全由Java ConcurrentHashMap使用(在Tomcat下)

这是一个内存堆栈(用作缓存),只包含一个静态ConcurrentHashMap(CHM)。 所有传入的HTTP请求数据都存储在此ConcurrentHashMap中。 并且有一个异步调度程序进程从同一个ConcurrentHashMap获取数据,并在将它们存储到数据库后删除key.value。 该系统运行良好且流畅,但只是按照以下标准发现,内存已充分利用(2.5GB)并且所有CPU时间都用于执行GC: -concurrent http命中1000 / s – 在15分钟内保持相同的并发命中 每次写入数据库时​​,异步进程都会记录CHM的剩余大小。 CHM.size()保持在Min:300到Max:3500左右 我以为这个应用程序存在内存泄漏。 所以我使用Eclipse MAT来查看堆转储。 运行可疑报告后,我从MAT获得了这些评论: 由“org.apache.catalina.loader.StandardClassLoader @ 0x853f0280”加载的“org.apache.catalina.session.StandardManager”的一个实例占用2,135,429,456(94.76%)个字节。 内存在“”由“”加载的“java.util.concurrent.ConcurrentHashMap $ Segment []”的一个实例中累积。 3,646,166 instances of java.util.concurrent.ConcurrentHashMap$Segment retain >= 2,135,429,456 bytes. 和 Length # Objects Shallow Heap Retained Heap 0 3,646,166 482,015,968 >= 2,135,429,456 我将上面的长度0转换为CHM内的空长记录(每次调用CHM.remove()方法)。 它与数据库内的记录数一致,创建此转储时,数据库中有3,646,166条记录 奇怪的情况是 :如果我暂停压力测试,堆内存中的利用率将逐渐降至25MB。这需要大约30-45分钟。 我重新模拟了这个应用程序,曲线看起来类似于下面的VisualVM图: inheritance人提出的问题: 1)这看起来像是内存泄漏吗? 2)每次删除调用remove(Object key, Object value)从CHM中删除 […]

JNA / ByteBuffer没有被释放并导致C堆耗尽内存

首先我要说的是,我对JNA和Java如何指导本机内存分配的理解充其量只是内心,所以我试图描述我对正在发生的事情的理解。 除了回复之外的任何更正都会很棒…… 我正在运行一个使用JNA混合Java和C本机代码的应用程序,并且正在运行Java垃圾收集器无法释放对直接本机内存分配的引用的可重现问题,从而导致C堆内存不足。 我很肯定我的C应用程序不是分配问题的来源,因为我将java.nio.ByteBuffer传递给我的C代码,修改缓冲区,然后在我的Java函数中访问结果。 我在每个函数调用期间都有一个malloc和一个相应的free ,但是在用Java重复运行代码后,malloc最终会失败。 这是一个有点夸张的代码集,展示了这个问题 – 实际上我试图在函数调用期间在C堆上分配大约16-32MB 。 我的Java代码做了类似的事情: public class MyClass{ public void myfunction(){ ByteBuffer foo = ByteBuffer.allocateDirect(1000000); MyDirectAccessLib.someOp(foo, 1000000); System.out.println(foo.get(0)); } } public MyDirectAccessLib{ static { Native.register(“libsomelibrary”); } public static native void someOp(ByteBuffer buf, int size); } 然后我的C代码可能是这样的: #include #include void someOp(unsigned char* buf, int size){ unsigned char *foo; foo = […]

JDK = Java SE && JDK!= Java EE?

请确认以上声明? 当他们提到JDK时,我需要知道他们指的是什么。

Java:为什么这种交换方法不起作用?

我有以下代码: public class Main { static void swap (Integer x, Integer y) { Integer t = x; x = y; y = t; } public static void main(String[] args) { Integer a = 1; Integer b = 2; swap(a, b); System.out.println(“a=” + a + ” b=” + b); } } 我希望它打印a = 2 b = […]

检查String听起来像Java中的另一个

我想知道Java中是否有任何类能够使用自己的标准检查String与另一个相等的数量。 示例: William Shakespeare / William Shakespeare : might be 100% William Shakespe**a**re / William Shakespe**e**re : might have above 90% William Shakespeare / Shakespeare, William : might have above 70% (just examples)

LOG4J:使用自定义appender修改记录的消息

出于安全原因,我需要查看我的应用程序中的每条记录消息,并可能在它转到日志文件之前对其进行修改。 我想我可以写一个自定义appender(扩展DailyRollingFileAppender)并覆盖subAppend(LoggingEvent事件)。 问题是,LoggingEvent中没有消息文本的setter,消息是私有属性。 我可以使用修改后的消息创建一个新的LoggingEvent,但API不能轻松复制原始LoggingEvent的其余部分。 这一切似乎都旨在阻止在自定义appender中插入消息。 我能看到的唯一另一个选项是修改数百个日志语句来调用一个新的全局方法,该方法可以先修改文本然后进行Log4J调用。 我宁愿不! 有没有其他人需要修改自定义appender中记录的消息?

#{} $ {}和%{}之间有什么区别?

我目前正在使用struts2,我只是不明白${var} , #{var}和%{var}之间的差异是不同的范围? 他们是什么? 我找到了一个#的例子: 在这里,它看起来像是一个关联数组,但有时候我把它看作#var (没有括号)任何想法?