Tengo una aplicación Java Webstart que se ejecuta en un servidor web Tomcat. Se ha firmado el único jar al que hace referencia el JNLP. Toda la aplicación web está detrás de una capa de autenticación básica.
Extracto de Web.xml:

    <security-constraint>
    <display-name> Client (SSL)</display-name>
    <web-resource-collection>
        <web-resource-name>Client (SSL)</web-resource-name>
        <url-pattern>/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
            <auth-constraint>
        <role-name>clientuser</role-name>
    </auth-constraint>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

 <login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>Client Webstart</realm-name>
</login-config>

Cuando ejecuto el JNLP, webstart me pide correctamente que complete el nombre de usuario y la contraseña, pero luego se bloquea con la siguiente excepción de puntero nulo:

java.lang.NullPointerException
at com.sun.deploy.security.DeployManifestChecker.verify(Unknown Source)
at com.sun.javaws.security.AppPolicy.grantUnrestrictedAccess(Unknown Source)
at com.sun.javaws.security.AppPolicy.addPermissions(Unknown Source)
at com.sun.jnlp.JNLPClassLoader.getTrustedCodeSources(Unknown Source)
at com.sun.deploy.security.CPCallbackHandler$ParentCallback.strategy(Unknown Source)
at com.sun.deploy.security.CPCallbackHandler$ParentCallback.openClassPathElement(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath$JarLoader.getJarFile(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath$JarLoader.access$800(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath$JarLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.deploy.security.DeployURLClassPath$JarLoader.ensureOpen(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath$JarLoader.<init>(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.deploy.security.DeployURLClassPath.getLoader(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath.getLoader(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath.getResource(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
at com.sun.javaws.Launcher.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
3
Orange Casper 23 ene. 2015 a las 18:36

2 respuestas

La mejor respuesta

El problema resultó no estar relacionado con la seguridad, sino en realidad otra parte del web.xml que no publiqué antes:

    <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>
....

El patrón de URL para el servlet se ha establecido en *. Lo que significaba que cuando el proceso de JWS se dirigía a la ubicación específica para descargar, el jar se redirigía de nuevo al servlet, que mostraba una página error.html en su respuesta en lugar de un jar.
Ahora he limitado la URL del servlet a:

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


mientras el jar sigue alojado en / releases / *

3
Orange Casper 27 ene. 2015 a las 10:45

Agregue el atributo "todos los permisos" en su manifiesto JAR. Consulte esta URL para obtener detalles http: // docs. oracle.com/javase/7/docs/technotes/guides/jweb/security/manifest.html

0
Rahul Winner 23 ene. 2015 a las 19:54