小编nab*_*lex的帖子

String.replaceAll(regex)进行两次相同的替换

谁能告诉我为什么

System.out.println("test".replaceAll(".*", "a"));
Run Code Online (Sandbox Code Playgroud)

结果是

aa
Run Code Online (Sandbox Code Playgroud)

请注意,以下结果相同:

System.out.println("test".replaceAll(".*$", "a"));
Run Code Online (Sandbox Code Playgroud)

我已经在java 6和7上测试了它,两者似乎都表现得一样.我错过了什么或者这是java正则表达式引擎中的错误吗?

java regex

41
推荐指数
1
解决办法
1742
查看次数

TLSv1握手失败

(免责声明:我不是想象力的安全专家,也不是Windows专家)

建立:

  • 我们端的服务器:在Windows 2003服务器上的java 1.6(已经在安全文件中添加了bouncycastle)
  • 第三方客户端:带有biztalk的Windows 2008服务器
  • 由于重新协商攻击而引入的所有重新协商系统属性都在服务器端"启用"(我知道不安全)

理想情况下,我们希望在最后修复此问题,但如有必要,可以向客户提出修复.

客户端服务器必须通过HTTPS连接连接到我们的服务器,但它总是失败,wireshark显示以下对话:

> TLSv1: Client Hello
< TLSv1: Alert (21): Unexpected Message
Run Code Online (Sandbox Code Playgroud)

根据RFC(http://www.ietf.org/rfc/rfc2246.txt),警报(21)指的是解密失败,而且我在wireshark中看到的,客户端提出的密码都不是通过JRE 1.6(按照支持http://docs.oracle.com/javase/6/docs/technotes/guides/security/SunProviders.html#SupportedCipherSuites)在努力重现误差,以便能够检查它更接近,我测试了一些其他软件:

  • 选择"https"的windows xp上的wfetch将在SSLv2中执行初始客户端握手,服务器将切换到TLSv1来回答,这是有效的
  • 配置为使用"TLSv1"进行初始握手的Windows XP上的wfetch将以与biztalk服务器相同的方式失败
  • 配置为"https"的Windows 2008上的wfetch将使用"TLSv1"进行初始握手,并以与biztalk服务器相同的方式失败
  • IE浏览器(Windows XP系统)将首先尝试使用TLSv1握手着同样的失败结果,但随即再次尝试使用SSLv3的其中工程(在这一点上我想所有的微软软件使用可用的中央配置在HKEY_LOCAL_MACHINE \系统\ CurrentControlSet \控制\ SecurityProviders\Schannel中)
  • firefox使用SSLv3进行整个对话,所以没问题
  • OpenSSL在SSLv2中执行初始握手,服务器在应答时切换到TLSv1,没问题
  • OpenSSL也可以被强制在TLSv1中进行初始握手,它提供了27个密码的列表(与基于Windows的软件提出的11个密码相反)并且可以连接而没有问题

对于我未经训练的眼睛,这强化了这样一种观点,即不兼容的密码命题是Windows仅支持JVM不支持的密码套件的根本原因(对于TLSv1).我已经安装了充气城堡作为java.security文件中的附加提供程序无济于事.我搜索了高低,只找到了一个参考,可能是websphere支持TLSv1的Windows密码,但无法下载独立的提供程序来测试它.我们在JVM上运行的软件不支持JRE 1.7,因此升级不是一个选项(也许安全提供程序可以安全降级?但我还没有找到它的下载)我发现无法添加密码编写c ++代码(我已经玩过上面提到的注册表设置没有效果).

总而言之,我想知道以下事情之一是否会解决它以及如何实现它们:

  • 添加一个提供程序到jvm,可以使用Windows提出的TLSv1的密码
  • 以某种方式强制客户端在SSLv3中执行初始握手(最好不是SSLv2),或者至少在TLSv1握手失败时重试
  • 以某种方式为客户端窗口添加一个支持JVM的TLSv1密码

当然也赞赏任何其他解决方案.

编辑

Java版本是Java version (64 bit): 1.6.0_19-b04.

建议的密码列表是:

  • TLS_RSA_WITH_RC4_128_MD5
  • TLS_RSA_WITH_RC4_128_SHA
  • TLS_RSA_WITH_3DES_EDE_CBC_SHA
  • TLS_RSA_WITH_DES_CBC_SHA
  • TLS_RSA_EXPORT1024_WITH_RC4_56_SHA
  • TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA
  • TLS_RSA_EXPORT_WITH_RC4_40_MD5
  • TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5
  • TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
  • TLS_DHE_DSS_WITH_DES_CBC_SHA
  • TLS_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA

安装了无限强度加密策略文件.我试图javax.net.debug=all从控制台设置和启动服务器,没有出现额外的输出.我已经sun.security.ssl.allowUnsafeRenegotiation=true无济于事了.

编辑2

事实证明,我们使用的软件使用HTTP的自定义堆栈而不是默认值.虽然我不确切知道TLS请求的哪一部分触发了错误(看到大多数TLSv1握手确实成功),但是发布了修复程序似乎解决了这个问题.

感谢您的反馈,如果徒劳无功,那将是一件非常有趣的事情.活到老,学到老.

java windows ssl https

12
推荐指数
1
解决办法
1万
查看次数

Java FX:声明性与程序性

我有基于网络的编程(php,jsf,...)的背景和swing和swt的最小背景.

目前我正在寻找一个新的桌面应用程序的java fx 2.x,我想知道有关构建实际GUI的最佳实践.我可以用fxml去声明路线,或者我可以去程序路线.目前对于一些快速原型设计我正在做后者,但我想知道是否有令人信服的理由使用fxml.

UPDATE

最后,我使用FXML路线进行平均大小的项目,即使场景构建器测试版在我的linux系统上仍然有些不稳定,但事实证明它远远优于原始程序原型.到目前为止,最大的优势是很多元素(尤其是hbox,vbox,标签,标签......)不再混乱我的代码,因为它们只存在于fxml中.

java javafx

11
推荐指数
1
解决办法
6950
查看次数

以编程方式控制应用服务器

我正在创建一个依赖于动态创建/管理各种资源(如jms队列,Web服务端点,jdbc连接)的应用程序......我有一个java EE背景,我目前正在研究jboss 7服务器但是我发现以编程方式控制这些事情变得越来越困难.最难控制的事情似乎是网络服务.我需要能够动态生成WSDL(和XSD),管理端点,肥皂处理程序等,系统似乎似乎没有设置这样做.

其他应用程序服务器似乎并没有真正提供任何突破性的解决方案,所以我想知道是否Java EE不是解决这个特定问题的最佳解决方案?

是否有应用程序服务器允许您这样做?还有其他技术吗?我是否应该推出集成了所有单独模块的自定义解决方案(例如jms服务器,Web服务器等......)?

UPDATE

为了澄清,大多数Java EE内容是通过注释和XML配置的混合来完成的.但是,假设您有每个资源的POJO和/或jar/war/...

假设我有一个@WebServiceProvider bean,它可以重用于多个输入/输出组合(例如,因为它动态地重定向内容).我需要能够动态部署提供商的新"实例".这意味着我不想复制代码并重新部署它,我只想在类路径上获取一个现有bean,并使用不同的配置设置多次部署它.这也意味着我需要动态管理WSDL.最终结果应该是一个web服务,其工作方式非常类似于应用程序服务器上的标准Web服务,具有必要的集成安全性,SOAP处理程序,......

我想在应用程序服务器代码的某个时刻,必须有一个类"WebserviceManager",它有一个像"createWebservice(...)"这样的方法,只要它发现一个webservice注释,它就会被部署模块实际使用.我想访问该方法和类似的方法来创建jdbc连接,jms队列,...

java java-ee

7
推荐指数
1
解决办法
308
查看次数

java中的内存映射文件:问题太多了?

内存映射文件(根据规范)在很大程度上取决于操作系统的实际实现,并且已经在javadoc中解释了许多这些未知方面.但是我有一些额外的问题,不知道在哪里寻求答案.

假设application A将文件映射到内存position=0size=10.

我会假设操作系统需要连续的内存来映射它吗?或者这取决于实施?

现在假设我们有一个application B映射position=0size=11.前10个字节是共享的还是完全不同的映射?这与连续记忆问题有关.

如果我们想要为IPC使用映射文件,我们需要知道数据如何在其他应用程序中反映出来,所以如果B写入内存,确实会A看到这个?

但是,当我阅读规范时,这取决于操作系统.这使得用于通用IPC变得危险,因为它会破坏可移植性吗?

另外假设操作系统确实支持它,所以B写入内存,A看到变化,如果我们这样做会发生什么:

B.write("something");
A.write("stuff");
A.read();
Run Code Online (Sandbox Code Playgroud)

到底会A读到什么?
或者换句话说:

如何管理文件指针?
如何使用并发,是否有跨应用程序锁定?

java memory-mapped-files

7
推荐指数
1
解决办法
247
查看次数

跨语言消息

我们使用一个专注于Java的工具,它在内部使用JMS并与外部Java软件通信.我们现在必须为C#应用程序设置一个新接口.我们的JMS提供程序提供了一个应该可以工作的C#实现,但我不完全确定JMS是这种情况下的方法.它将在C#应用程序中引入新的特定于供应商的依赖关系,以用于实现的细节和客户端的支持.

一些谷歌搜索引导我到STOMP,这似乎是一个由多个支持JMS的消息代理(hornetq,activemq,...)支持的已建立的线级协议,但在C#中似乎明显缺乏实际的客户端(和java到在某种程度上).如果不深入研究,我也不能完全确定"文本"的重点在哪里发挥作用?它不支持二进制对象吗?

另一种解决方案可能是AMQP,这是另一种线级协议,但1.0规范尚未发布,我们厌倦了实施4年前的0.9.1规范,因为它似乎在1.0中发生了很大变化.

考虑到安全性,支持,事务性,标准合规性,可移植性等,哪种解决方案最适合语言间异步消息传递...请注意,具有适当WS-*的soap不适用于此特定接口.

编辑1:我见过跨平台,跨语言邮件系统等问题?但他们似乎专注于一种适用于多种语言的特定工具.我实际上正在寻找一个符合标准的协议,该协议可由多个供应商实施或由多个供应商实施.

c# java messaging jms

6
推荐指数
1
解决办法
548
查看次数

用于动态字节存储的碎片阵列的缺点

默认的ByteArrayOutputStream似乎是一个相当浪费的实现,我想知道是否有任何具体原因.首先,它在后端保留1个固定阵列.如果它已满,它会创建一个新数组并将旧数组复制到其中(更多内存+更多开销).然后,如果你执行toByteArray(),它实际上会再次复制数组.

字节缓冲区很好,但也固定大小,它们只提供单个阵列上的一些,仅此而已.

我想知道创建一个使用一个或多个支持数组的类(或者它是否已存在,请指向我)是否有趣.它不是每次都要重复扩展数组,而是添加一个新的后备数组.要阅读您可以轻松创建一个类似inputstream的界面,同时您可以公开像outputstream这样的界面进行写入

关于这样的事情是否已经存在的任何反馈,如果没有:为什么?它有一些我不会看到的缺点吗?

java arrays

6
推荐指数
1
解决办法
324
查看次数

使用嵌入式OSGi容器

我正在构建一些我希望作为OSGi包公开的模块,而没有任何与OSGi库的实际依赖关系.看来这可能是使用声明性服务选项.

但是因为我对OSGi很新(至少在创建捆绑包方面)我想测试它是否一切正常,为此我想建立一个小的嵌入式OSGi环境.

目前我有一个导出API的bundle,还提供了单个接口的stub实现.

我按照以下教程设置了一个环境:

嵌入式felix实现似乎正常工作,但有两个问题:

Bundle bundle = felix.getBundleContext().installBundle("/path/to/bundle.jar")
bundle.start();
System.out.println(bundle.getRegisteredServices());
Run Code Online (Sandbox Code Playgroud)

这打印出来,null所以当捆绑看起来好了,它似乎没有暴露任何服务.

其次,我想知道是否必须做一些特殊的事情才能使声明性服务更新并运行.我的maven依赖是:

<dependencies>
    <dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.apache.felix.framework</artifactId>
        <version>4.2.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.apache.felix.scr</artifactId>
        <version>1.6.2</version>
    </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

基于此处的电子邮件主题:http://mail-archives.apache.org/mod_mbox/felix-users/201111.mbox/%3CAE48C9B8172EFC48A028B60E8D6F96660143A5F336@sausexmbp02.amd.com%3E

我试图将包添加到felix启动属性:

map.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, "org.apache.felix.scr; version=1.6.2");
Run Code Online (Sandbox Code Playgroud)

然而,乍一看这似乎有点乐观.如何为嵌入式felix引擎启用声明性服务?

java osgi apache-felix

5
推荐指数
1
解决办法
3784
查看次数

在javafx中摆动JTextPane

我在javafx寻找一个丰富的textarea.我已经尝试过Tomas Mikula的RichTextFX组件,但它对我的需求来说太麻烦了.

我在想是否可以使用SwingNode类插入一个swing JTextPane.

到目前为止,它实际上工作,我可以看到JTextPane中的文本和它周围的JScrollPane甚至工作.JTextPane上的mouselistener似乎也正确地为鼠标事件触发,但除此之外......没有任何效果.

没有光标指示当前位置,没有办法用鼠标"点击"改变位置,选择文字,...

关键事件根本没有到达(使用keylistener)

是否可以在javafx中使用JTextPane,如果是这样,我缺少什么?

java swing javafx

5
推荐指数
1
解决办法
1143
查看次数

使用apache poi检测excel中的隐藏单元格

我们使用apache poi 3.8来解析excels.我们需要能够检测(并跳过)隐藏的行,因为它们往往在我们的用例中包含垃圾数据.

这似乎应该工作:

row.isFormatted() && row.getRowStyle().getHidden()
Run Code Online (Sandbox Code Playgroud)

但似乎从来没有任何行级格式(getRowStyle()总是返回null).作为最后的手段,我们认为检查单元格样式可能有效:

for (int i = 0; i < row.getLastCellNum(); i++) {
    Cell cell = row.getCell(i);
    if (cell != null && cell.getCellStyle() != null && cell.getCellStyle().getHidden())
        ...
Run Code Online (Sandbox Code Playgroud)

但是对于我们获得的每一行(上面的for循环中的自定义输出):

Cell 0 is not hidden org.apache.poi.hssf.usermodel.HSSFCellStyle@1b9142d0 / false
Run Code Online (Sandbox Code Playgroud)

"getHidden()"不起作用还是不起作用?还有另一种检测隐藏行的方法吗?(隐藏的列也是一个很好的奖励,但相关性稍差的atm)

java apache excel apache-poi

3
推荐指数
1
解决办法
7892
查看次数