根据Java web start,jar文件在客户端机器上下载了什么?
最新的JRE(1.7.0_25)更新后,我的应用程序将不会像以前那样从webstart启动.我没有部署任何较新的jar文件或更改了Web服务器上的JNLP文件,但我无法从webstart启动该应用程序.它可以从IDE运行,也可以从本地jar执行
我试图在控制面板的高级选项卡中禁用所有证书检查等,但错误仍然存在,我不确定这是否与最新JRE中的新安全设置有关,或者是否有其他更改(可能在网络上)服务器?)我不控制Web服务器我只有一个发布应用程序的页面,并且可以访问jar文件的驱动器位置,权限对于驱动器位置是正确的.我现在迷失了什么问题是!我试着辞去罐子并验证签名
我感谢民间所能给予的任何帮助!完整错误如下:
java.lang.NoClassDefFoundError: Could not initialize class sun.security.ec.SunEC
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at sun.security.jca.ProviderConfig$2.run(Unknown Source)
at sun.security.jca.ProviderConfig$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.security.jca.ProviderConfig.doLoadProvider(Unknown Source)
at sun.security.jca.ProviderConfig.getProvider(Unknown Source)
at sun.security.jca.ProviderList.getProvider(Unknown Source)
at sun.security.jca.ProviderList.getService(Unknown Source)
at sun.security.jca.GetInstance.getInstance(Unknown Source)
at java.security.Security.getImpl(Unknown Source)
at java.security.AlgorithmParameters.getInstance(Unknown Source)
at sun.security.x509.AlgorithmId.decodeParams(Unknown Source)
at sun.security.x509.AlgorithmId.<init>(Unknown Source)
at sun.security.x509.AlgorithmId.parse(Unknown Source)
at sun.security.x509.X509Key.parse(Unknown Source)
at sun.security.x509.CertificateX509Key.<init>(Unknown Source)
at sun.security.x509.X509CertInfo.parse(Unknown Source)
at sun.security.x509.X509CertInfo.<init>(Unknown Source)
at sun.security.x509.X509CertImpl.parse(Unknown Source)
at sun.security.x509.X509CertImpl.<init>(Unknown …Run Code Online (Sandbox Code Playgroud) 我们今天(2015年4月14日)在30分钟内看到了3个不同客户安装的例外情况.
java.lang.SecurityException: Can not verify security pack jar
com.sun.deploy.util.SecurityBaseline.verifyJar(Unknown Source)
com.sun.deploy.util.SecurityBaseline.access$200(Unknown Source)
com.sun.deploy.util.SecurityBaseline$1.run(Unknown Source)
java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
我认为这不会导致问题,因为它是在后台线程中从deploy.jar(SecurityBaseline.java)开始尝试验证的?奇怪的是,它同时发生在多个客户身上.我知道它的唯一原因是我们安装了一个默认的未捕获异常处理程序来记录和报告应用程序中的任何未处理的异常.
有没有人看过这个或知道它意味着什么?我尝试阅读源代码的反编译版本,并不清楚失败的确切位置.我得到了异常的界限,但它可能来自两条不同的路径,这两条路径对于一个局外人来说都非常微不足道.
我现在倾向于忽略它,但我担心它预示着一个更大的问题.
希望有人能帮助我解决这个奇怪的问题.我正在尝试运行webstart插件但它似乎无法找到正在生成的jar中的主类.pom就像它可以获得的那样简单,并且类Test存在,并且正在被编译并放置在jar中.有人可以指点我正确的方向吗?
<project>
<modelVersion>4.0.0</modelVersion>
<name>Desktop Components</name>
<groupId>com.test</groupId>
<artifactId>test</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo.webstart</groupId>
<artifactId>webstart-maven-plugin</artifactId>
<executions>
<execution>
<phase>process-resources</phase>
<goals>
<goal>jnlp-download-servlet</goal>
</goals>
</execution>
</executions>
<configuration>
<jnlpFiles>
<jnlpFile>
<jarResources>
<jarResource>
<groupId>com.test</groupId>
<artifactId>test</artifactId>
<version>1.0</version>
<mainClass>Test</mainClass>
</jarResource>
</jarResources>
</jnlpFile>
</jnlpFiles>
</configuration>
</plugin>
</plugins>
</build>
</project>
Run Code Online (Sandbox Code Playgroud)
这是Maven的跟踪:
C:\TEMP\webstart-test>mvn webstart:jnlp –e
+ Error stacktraces are turned on.
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building Desktop Components
[INFO] task-segment: [webstart:jnlp] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] Preparing webstart:jnlp
[INFO] ------------------------------------------------------------------------
[INFO] Building Desktop Components
[INFO] ------------------------------------------------------------------------
[INFO] [resources:resources {execution: …Run Code Online (Sandbox Code Playgroud) 我一直试图让webstart在内存不足时转储到堆转储.
我知道jmap/jconsole这样做的方式,但我真正想做的是将选项添加到jnlp文件并尝试了以下选项.
只是尝试在整个swinglabs演示中添加一些swingx-ws组件 - 并注意到与本地加载相比,简单的JXMapKit/-Viewer在webstartable中加载tile的速度要慢几个数量级.
相当失去我应该开始寻找的地方(ui更新似乎在EDT上,但可能需要仔细看看):
代码非常简单(要在本地运行,你需要swingx和swingx-ws:
public class WSDemo {
private JComponent createContent() {
JComponent content = new JPanel();
content.setLayout(new BorderLayout());
content.add(createMapKit());
return content;
}
protected JComponent createMapKit() {
final int max = 17;
TileFactoryInfo info = new TileFactoryInfo(1, max - 2, max, 256, true,
true, // tile size is 256 and x/y orientation is normal
"http://tile.openstreetmap.org",// 5/15/10.png",
"x", "y", "z") {
public String getTileUrl(int x, int y, int zoom) {
zoom = max …Run Code Online (Sandbox Code Playgroud) 所以我们安装了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我不知道它在内部做了什么.对不起,如果没有源代码,我可能会要求提供一个不容易解决的特殊情况,但是,无论如何,请相信告诉我任何想法.
最好的祝福
一旦Java Swing应用程序从Java 6 32位转移到Java 7 32位更新11,我们就会遇到性能问题.任何人都可以提供一些线索吗?
该应用程序使用Java Web-start技术,服务器是Tomcat 7.客户端应用程序占用1GB内存,因此屏幕冻结.
我们正在交换序列化对象,以下是代码:
Object object = connection.sendCommand(command); // exchanging serialized object
public class ConnectionImpl implements Connection {
public Object sendCommand(Command command) throws Exception {
URL url = new URL(System.getProperty("serverUrl"));
URLConnection connection = url.openConnection();
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setUseCaches(false);
oos = new ObjectOutputStream(new BufferedOutputStream(connection
.getOutputStream()));
oos.writeObject(command);
oos.flush();
InputStream inputStream = connection.getInputStream();
ZipInputStream zip = new ZipInputStream(inputStream);
if (zip.getNextEntry() != null) {
ois = new ObjectInputStream(zip);
object = ois.readObject();
}
zip.close();
}
}
// The serialized class …Run Code Online (Sandbox Code Playgroud) 我创建了一个简单的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) 现在的情况
我们目前使用applet执行一些操作,然后重定向当前页面.在其核心中,您可以看到applet如下:
public class ExampleApplet extends Applet {
@Override
public void init() {
Button redirect = new Button("Redirect");
this.add(redirect);
final String target = this.getParameter("targetPage");
redirect.addActionListener((ActionEvent e) -> {
try {
getAppletContext().showDocument(new URL(target), "_parent");
} catch (MalformedURLException ex) {}
});
}
}
Run Code Online (Sandbox Code Playgroud)
以最简单的方式调用applet:
<applet code="com.example.applet.ExampleApplet.class" archive="${appletUrl}" width="100" height="30">
<param name="targetPage" value="http://localhost:8080/applet/"/>
</applet><br/><br/>
Run Code Online (Sandbox Code Playgroud)
其中${appletUrl}返回applet JAR的位置.
所以applet只不过是一个调用getAppletContext().showDocument(new URL(target), "_parent");刷新当前页面的简单按钮.这已经很长时间正确地完成了它的工作.现在这是问题所在.
移民
众所周知,Chrome不支持Applets.从那时起搁置一段时间IE并FireFox仍然支持他们.在2016年底,他们也将不再支持他们.所以我们决定使用JWS和迁移applet JNLP.
迁移此简单重定向按钮示例将提供以下html代码段和JNLP文件:
<a href="${jnlpUrl}">Launch JNLP</a> …Run Code Online (Sandbox Code Playgroud)