Java 在身份验证层后面读取清单签名的webstart jar时发生NullPointerException

Java 在身份验证层后面读取清单签名的webstart jar时发生NullPointerException,java,nullpointerexception,manifest,java-web-start,Java,Nullpointerexception,Manifest,Java Web Start,我有一个JavaWebStart应用程序在TomcatWeb服务器上运行。 JNLP引用的单个jar已签名。 整个web应用程序位于基本身份验证层之后。 Web.xml摘录: 客户端(SSL) 客户端(SSL) /* 得到 邮递 客户用户 保密的 基本的 客户端Webstart 当我运行JNLP时,webstart正确地要求我填写用户名和密码,但随后崩溃,出现以下空指针异常: java.lang.NullPointerException 位于com.sun.deploy.security.

我有一个JavaWebStart应用程序在TomcatWeb服务器上运行。 JNLP引用的单个jar已签名。 整个web应用程序位于基本身份验证层之后。
Web.xml摘录:


客户端(SSL)
客户端(SSL)
/*
得到
邮递
客户用户
保密的
基本的
客户端Webstart
当我运行JNLP时,webstart正确地要求我填写用户名和密码,但随后崩溃,出现以下空指针异常:

java.lang.NullPointerException
位于com.sun.deploy.security.DeployManifestChecker.verify(未知源)
位于com.sun.javaws.security.AppPolicy.grantUnrestrictedAccess(未知源)
位于com.sun.javaws.security.AppPolicy.addPermissions(未知源)
位于com.sun.jnlp.JNLPClassLoader.getTrustedCodeSources(未知源)
位于com.sun.deploy.security.CPCallbackHandler$ParentCallback.strategy(未知源)
位于com.sun.deploy.security.CPCallbackHandler$ParentCallback.openClassPathElement(未知源)
位于com.sun.deploy.security.DeployURLClassPath$JarLoader.getJarFile(未知源)
位于com.sun.deploy.security.DeployURLClassPath$JarLoader.access$800(未知源)
位于com.sun.deploy.security.DeployURLClassPath$JarLoader$1.run(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于com.sun.deploy.security.DeployURLClassPath$JarLoader.ensureOpen(未知源)
位于com.sun.deploy.security.DeployURLClassPath$JarLoader。(未知来源)
位于com.sun.deploy.security.DeployURLClassPath$3.run(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于com.sun.deploy.security.DeployURLClassPath.getLoader(未知源)
位于com.sun.deploy.security.DeployURLClassPath.getLoader(未知源)
位于com.sun.deploy.security.DeployURLClassPath.getResource(未知源)
位于java.net.URLClassLoader$1.run(未知源)
位于java.net.URLClassLoader$1.run(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(未知源)
位于com.sun.jnlp.JNLPClassLoader.findClass(未知源)
位于java.lang.ClassLoader.loadClass(未知源)
位于java.lang.ClassLoader.loadClass(未知源)
位于java.lang.ClassLoader.loadClass(未知源)
位于com.sun.javaws.Launcher.doLaunchApp(未知源)
位于com.sun.javaws.Launcher.run(未知源)
位于java.lang.Thread.run(未知源)

在JAR清单中添加“所有权限”属性。有关详细信息,请参阅此url

问题原来与安全无关,但实际上是web.xml的另一部分,我以前没有发布过:

    <servlet>
    <description>
        The Client.
    </description>
    <display-name>Client</display-name>
    <servlet-name>GenerateClientJNLPServlet</servlet-name>
    <servlet-class>web.GenerateClientJNLPServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>GenerateClientJNLPServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

<security-role>
    <role-name>clientuser</role-name>
</security-role>
....

客户。
客户
GenerateClientJNLPServlet
web.GenerateClientJNLPServlet
GenerateClientJNLPServlet
/*
客户用户
....
servlet的URL模式已设置为*。这意味着当JWS进程转到特定位置下载jar时,jar被重定向回servlet,servlet在其响应中提供error.html页面,而不是jar页面。
我现在将servlet url限制为:

<url-pattern>/LaunchClient/*</url-pattern>
/LaunchClient/*


虽然jar继续托管在/releases/*

谢谢,但清单已经有:Permissions:all权限
<url-pattern>/LaunchClient/*</url-pattern>