草庐IT

java - 如何创建安全的 JEXL(脚本)沙箱?

我正在为JEXL脚本创建一个沙箱,以便恶意用户无法访问我们授予他们访问权限的变量之外的数据,也无法对服务器执行DOS攻击。我想为同样这样做的其他人记录下来,并征求其他人对该方法的意见。以下是我所知道的需要解决的问题的列表:只允许使用白名单上的“new”实例化类。不允许访问任何类的getClass方法,因为这样可以调用forName并且可以访问任何类。限制对文件等资源的访问。只允许表达式执行一定的时间,这样我们就可以限制它消耗的资源量。这不适用于JEXL,但可能适用于您正在使用的脚本语言:不允许对象具有自定义的finalize方法,因为finalize方法是从终结器线程调用的,并且将使用

java - JPanel重绘问题

我有一个JFrame,它在BorderLayout中包含2个JPanel子类和2个JLabel。其中一个JPanel包含JButton,另一个用于显示图形。JLabel位于南北,按钮JPanel位于西边,显示JPanel位于中间。显示JPanel需要不断刷新,所以我通过Swing计时器生成的Action事件调用它的repaint()方法。我还覆盖了它的paintComponent()方法来绘制。不是显示我绘制的内容,而是将“JFrame的内容”绘制到显示JPanel上。我知道我可以在绘制之前使用g.fillRect()或super.paintComponent()简单地“清除”显示JP

java - 如何在完全透明的 JFrame 上创建部分透明的 JButton?

我能够使JFrame完全透明,而JButton部分透明,直到我将鼠标移到按钮上(不要单击)并将鼠标从按钮上移开(通过MouseListener调用MouseExited)。发生的情况是再次绘制JButton的背景,因此在按钮上和按钮上移动几次鼠标后,按钮完全不透明。publicclassButtonExampleextendsJWindow{publicButtonExample(){JButtonBut=newJButton("Testing");But.setBackground(newColor(0,0,0,200));But.setForeground(newColor(70,

java - JList 复制选择

我正在尝试使用Swing,并决定专注于将JList与对象数组列表结合使用。我想创建一个显示空白JList的程序,当按下按钮时,它会显示arraylist的内容,并允许单选,打印出曾经选择的内容。我当前的代码执行上述所有操作,但是当我单击JList上的单个条目时,它会打印两次。我觉得这是一个很容易纠正的简单错误,但我一直在通读它,但我的大脑已经停止合作。任何帮助将不胜感激。提前致谢:)importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;importjava.util.ArrayList;importjavax.swing

java - 在java中生成证书链

问题是如何在Java中以编程方式生成证书链。换句话说,我想在java中执行此处详述的操作:http://fusesource.com/docs/broker/5.3/security/i382664.html基本上,我可以为新客户端创建RSAkey:privateKeyPairgenRSAKeyPair(){//GetRSAkeyfactory:KeyPairGeneratorkpg=null;try{kpg=KeyPairGenerator.getInstance("RSA");}catch(NoSuchAlgorithmExceptione){log.error(e.getMess

java - GUI Java 程序 - Paint 程序

我一直在努力找出我的代码有什么问题。这个想法是创建一个小的画图程序,并有红色、绿色、蓝色和清除按钮。我有我能想到的一切让它工作,但无法弄清楚代码有什么问题。程序打开,然后立即关闭。importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassPaint{publicstaticvoidmain(String[]args){guig=newgui();g.setVisible(true);}}publicclassguiextendsJComponentimplementsActionListener{JBu

java - 我需要做什么来用渐变绘画复制这个组件?

我试图复制这个组件(在帖子的底部),但我似乎无法让它看起来不错。所以我想知道,如何复制这种渐变颜料?或者,如果不是渐变涂料,我该怎么做才能获得类似的结果?与此组件相比,我的尝试结果是非常平坦的黑色。它还具有JFrame选项(关闭、最小化等),并且组件没有“圆形”外观。我正在寻找可以改进我所拥有的并解释我哪里出错的人。我知道我可以简单地使用已经制作好的外观,但我想让我的示例项目尽可能接近图像中的BitDefenderGUI,不包括文本。(如果需要我可以提供代码)另请注意,我跳过了背景和“病毒防护”、“自动扫描”、“我的BitDefender”面板之间的面板。我这样做主要是因为我想让我的S

java - 搜索文本文件并在 JPanel 中显示结果

有没有人知道如何搜索文本文件并在JComponent(如JPanel)中列出结果。两天来我一直在努力解决这个问题,但如果没有成功,我将不胜感激。非常感谢。我一直在尝试编写一个类来处理对文本文件的搜索查询。我的主要目标是获取包含在JTextField中输入的搜索关键字的文本文件中的行,并将它们打印在适当的JComponent(类似于JTextField、JTextPane,以最适用的为准)中。我希望搜索结果显示在列中,就像google搜索结果的显示方式一样,以便文本文件中的每一行都打印在自己的行中。有人告诉我最好使用ArrayList。我真的不知道该怎么做。我从各地收集了一些想法,这就是

java - 为什么使用 new 运算符创建的字符串会在字符串池中创建字符串文字

我的问题是,当我们将String声明为Stringa=newString("abc");时,在字符串池和堆上创建字符串对象有什么好处?当我们将字符串创建为Stringa="abc"时,为什么不在堆中创建字符串。 最佳答案 java语言就是这么设计的。双引号之间使用的任何内容都是编译时常量并进入字符串池。所以,在你的情况下:Stringa=newString("abc");“abc”将被解析为编译时常量,因此将被添加到当前JVM的字符串常量池中。接下来,a的值将在运行时解析,并在运行时添加到堆中。

java - keySet().toArray(new Double[0]) 是做什么的?

下面的返回是做什么的?我如何使用该值:privateMaptheLabels=newHashMap();publicDouble[]getTheLabels(){returntheLabels.keySet().toArray(newDouble[0]);}这是正确的吗?Double[]aD=theClassInQuestion.getTheLabels();提前致谢。胡志明 最佳答案 这是正确的,但是,除非theLabels为空,否则强制重新分配数组。这是一个替代方案:publicDouble[]getTheLabels(){re