我们在Java应用程序中定义了一个包含以下内容的自定义HTTP User-Agent:
我们希望将此用户代理应用于应用程序创建的所有HTTP连接,包括我们手动打开的连接,以及JRE自动创建的连接,例如,当JEditorPane解析HTML代码中引用的外部图像时.
为此,我们在应用程序启动时将"http.agent"系统属性设置为1/2/3点(让JRE自己添加Java版本):
System.setProperty("http.agent", Version.getAgentString());
Run Code Online (Sandbox Code Playgroud)
当我们从jar运行应用程序时,这很有用,但不是从Java Web Start运行.
作为解决方法,我们手动将完整的User-Agent设置为我们手动创建的连接:
public static HttpURLConnection openHttpConnection(URL httpURL) throws IOException {
HttpURLConnection connection = (HttpURLConnection) httpURL.openConnection();
connection.setRequestProperty("User-Agent", Version.getFullAgentString());
return connection;
}
Run Code Online (Sandbox Code Playgroud)
但这并不能处理JRE(JEditorPane示例)创建连接的情况.
在这种情况下,我们如何设置用户代理?
我们试图sun.net.www.protocol.http.HttpURLConnection.userAgent通过使用这个例子中的反射来改变它的值,但它不起作用,我们正面临着一个问题IllegalAccessException.
我们既不能在JNLP文件中设置User-Agent,因为无法确定客户端信息(用户语言+平台).
所以我们安装了Java 7u21版本,该版本应该会加强applet的安全性.不幸的是,它收紧了很多,以至于我们的applet不再运行了.不好.
有趣的是,它只在我们使用JWS操作时才停止工作.如果我们从标准网页将其作为标准小程序启动,一切正常.
在JWS模式中,我们至少会在反射和问题上遇到安全问题java.lang.Thread.setDefaultUncaughtExceptionHandler.
证书看起来不错.
来自Oracle的发行说明没有提供与JWS相关的任何内容的大量输入.
因此,我对社区的问题是:有没有人有想法或(甚至更好)解决这个问题?
与给定建议/评论相关的其他信息:
这个小程序由全球数百个第三方客户运行,因此不幸的是,更改安全策略是不可取的.该问题对于客户来说是可重现的.但我可以确认更改策略文件可以解决问题.
当我从Eclipse启动的Tomcat运行applet时(因此当然没有签名的applet),它会按预期在浏览器中显示警告通知.作为一个容易上当的人,我允许applet运行,因为它是从我自己的开发环境启动的.这仍然会导致安全性失败.
我已经考虑过,如果这是Java中的错误,但我想看看是否有其他人看到同样的问题.我想我们都知道修复bug的Oracle周转时间并不总是最好的......
感谢您的任何意见.
非常感谢Tony,你的建议让我能够在7u21中创建applet,正确地说; 我认为这是一个向前的步骤,我正在通过浏览器签署和唤醒许多小程序,这些超过7u21.我今天早些时候不想这样做.但是我被困了几个小时,事实上我还没有从我的遗留应用程序中唤醒我的第一个第三方小程序(即在JVM 1.6或更老版本中工作正常).
涉及的applet,我签了他们,但我总是得到错误:SecurityException - "Bad applet class name".我有一些小程序,并且html代码调用它们,问题是我的第一个小程序链(在调用链中没有任何其他)可能不像其他签名小程序正在做的那样(这些小程序来自java网站进行培训) ),这个第3方applet简单不运行并抛出上面提到的异常.我的第三部分applet我不知道它在内部做了什么.对不起,如果没有源代码,我可能会要求提供一个不容易解决的特殊情况,但是,无论如何,请相信告诉我任何想法.
最好的祝福
我创建了一个简单的Hello World Swing应用程序,它可以在Eclipse中编译和运行.我现在正在尝试将此应用程序转移到Maven包结构并将其作为Java Web-Start应用程序运行,这让我感到非常痛苦.运行"mvn clean install"后,javaws似乎加载了几秒钟然后退出.
以下是一些可供参考的内容.我(非常简单)的项目应该是完全可重现的:
包结构(来自树):
??? pom.xml
??? readme.txt
??? SwingWebstartMaven-Client
? ??? pom.xml
? ??? src
? ? ??? main
? ? ? ??? java
? ? ? ? ??? com
? ? ? ? ??? shaunabram
? ? ? ? ??? swingwebstartmaven
? ? ? ? ??? HelloWorldSwing.class
? ? ? ? ??? HelloWorldSwing.java
? ? ? ??? jnlp
? ? ? ? ??? template.vm
? ? ? ??? resources
? ? ??? test
? …Run Code Online (Sandbox Code Playgroud) 我们在物理服务器中有一个文件夹,需要与我们的一个 Aws s3 存储桶同步。但这里的要求是,我们必须以两种方式同步内容(在物理服务器中所做的更改应反映在 Aws S3 存储桶中,反之亦然)。这可能吗?
我想配置我的webstart app/jnlp,这样如果没有可用的Internet连接,它将从缓存开始.然而,当我断开与互联网的连接时,我总是得到NoRouteToHostException或UnknownHostException异常,尽管下面的配置.
我认为我已正确设置了脱机允许和更新标签/属性; 我找不到webstart仍在尝试查找主机的原因.当我连接时,我确实从我之前的开始缓存了应用程序.
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="6.0+" codebase="http://cms.mydomain.com/sync/" href="myAppSync.jnlp">
<information>
<title>My App Sync</title>
<vendor>My Company</vendor>
<homepage href="http://www.myapp.com/"/>
<description>Sync application for My App</description>
<icon href="ATTico.png"/>
<!-- allow app to run without Internet access -->
<offline-allowed/>
<shortcut online="true">
<desktop/>
<!-- create menu item for this app under the major heading 'My App' -->
<menu submenu="My App"/>
</shortcut>
</information>
<security>
<all-permissions/>
</security>
<update check="timeout" policy="always" />
<resources>
<java version="1.6*" href="http://java.sun.com/products/autodl/j2se"/>
<jar href="lib/myAppSync.jar" />
<jar href="lib/apache-mime4j-0.6.jar" />
<jar href="lib/commons-logging-1.1.1.jar" />
<jar …Run Code Online (Sandbox Code Playgroud) 我正在使用提供数据在线备份的桌面应用程序.在我的应用程序中,我正在尝试实现自动软件更新功能.为此我使用java web start.我已经完成了以下使用java web start的过程.
1>创建了包含所有资源的jar.2>创建jnlp文件为:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+"
codebase="http://cmswebusa.com/kapil"
href="PixelVaultJNLP.jnlp">
<information>
<title>PixelVault</title>
<vendor>globussoft</vendor>
</information>
<resources>
<!-- Application Resources -->
<jar href="PixelVault.jar" main="true" />
</resources>
<application-desc
name="PixelVault"
main-class="com.pixelvault.systemtray.SysTray">
</application-desc>
<update check="background"/>
</jnlp>
Run Code Online (Sandbox Code Playgroud)
其中PixelVault.jar是位于http服务器位置的应用程序的jar.
当我尝试使用命令提示符运行选项下载我的应用程序时输入:javaws,我得到AWT权限异常为:
java.security.AccessControlException:访问被拒绝"java.awt.AWTPermission"
它说"java.awt.AWTPermissionException""accessSystemTray".我没有得到如何允许我的应用程序使用系统托盘.
请指导在jnlp文件中进行更改或在我的应用程序中进行任何其他更改.
我感谢您提出的所有有价值的建议,这些建议将帮助我解决这个问题.
当您的JNLP部署应用程序将要卸载时(通过添加/删除程序或Java控制面板),Java Web Start是否有任何回调?
原因是删除任何应用程序生成的工件和目录.
如何使用SwingEventMonitor监视在其他JVM中运行的应用程序中的鼠标事件?
我所拥有的演示代码可以监视在自己的JVM中运行的应用程序中的鼠标点击,但是单独启动或通过jnlp启动的应用程序将被忽略.
我如何确保Java为每个应用程序加载我的SwingEventMonitor应用程序,无论它是如何启动的(桌面或jnlp)
我是几乎所有相关事情的新手,但是想使用Maven构建一个Java Web Start应用程序.我还需要重新打包一个特定的.jar(commons-httpclient-3.1.jar),否则它不会与JarSigner签名(当我用google搜索时看起来是一个常见的问题).也许我可以使用这个 Maven插件,但我甚至不知道如何设置Maven存储库.
我(可能)需要:
我更喜欢链接到大块文档的示例.:) 提前致谢!
可能重复:JNLP中的java.security.properties
我们有一个桌面应用程序,我们开始使用Java WebStart.从JDK 1.8.71开始,MD5现已禁用以进行X509证书验证.遗憾的是,我们无法更改我们正在使用的证书.
解决方法是更改java.security文件(jre/lib/security/java.security),使得"jdk.certpath.disabledAlgorithms"不再包含MD5,但由于我们无权访问,因此这绝对是不可能的.客户电脑.我们尝试在JNLP文件中设置属性(不起作用)并调用:
java.security.Security.setProperty("jdk.certpath.disabledAlgorithms", "");
java.security.Security.setProperty("jdk.tls.disabledAlgorithms", "");
Run Code Online (Sandbox Code Playgroud)
上面的代码适用于本地启动的JAR,但不适用于JNLP.知道这应该有用吗?我找不到任何关于JNLP可以编辑哪些安全属性的文档.
java-web-start ×10
java ×8
jnlp ×5
maven ×2
amazon-s3 ×1
applet ×1
deployment ×1
exception ×1
http ×1
linux ×1
maven-plugin ×1
security ×1
swing ×1
user-agent ×1
windows ×1