2017-05-08 2 views
0

je mets en œuvre une JAAS LoginModule, en utilisant l'artefactjetée avec JAAS Owne

<groupId>org.eclipse.jetty</groupId> 
<artifactId>jetty-util</artifactId> 
<version>${jetty.version}</version> 

La mise en œuvre de LoginModule étend la classe AbstractLoginModule comme recommandé dans la documentation jetée. Si j'utilise <scope>provided</scope> pour déclarer la dépendance de jetty-util alors j'obtiens l'exception

java.lang.NoClassDefFoundError: org/eclipse/jetty/util/security/Credential avec la cause Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.util.security.Credential.

Mais si je retire le <scope> -Tag pour l'inclure dans classpath d'exécution, puis-je obtenir l'exception

javax.security.auth.login.LoginException: java.lang.LinkageError: loader constraint violation: loader (instance of org/codehaus/plexus/classworlds/realm/ClassRealm) previously initiated loading for a different type with name "org/eclipse/jetty/util/security/Credential"

Si j'utilise la valeur par défaut JAAS-mise en œuvre PropertyFileLoginModule tout fonctionne out-of la boîte. Bien sûr, je n'ai pas à déclarer la dépendance de cet artefact. Il est inclus dans jetty maven plugin.

Toutes les exceptions se produisent lorsque je lance la jetée: run-Plugin dans maven.

Mon implémentation JAAS est séparée dans un artefact, mon projet Web est séparé dans un autre artefact, basé sur l'artefact test-jaas-webapp fourni par jetty dans github. Comment puis-je utiliser ma propre implémentation JASS en conjonction avec le plugin Jetty Maven?

Environnement: Jetty 9.2.x, Java 1.8_u111, Maven 3

Répondre

0

Eh bien, après quelques essai-erreur que j'avais trouvé à traiter Classloader manière du projet Maven. Première JAAS artefact:

  • mise en œuvre JAAS doit être un artefact séparé.
  • Cet artefact peut utiliser jetty-util comme dépendance, mais uniquement dans la portée fournie.
  • Cet artefact doit être chargé en tant que module du serveur Jetty. Une façon de le faire est, mettre le pot de l'artefact dans l'option lib/ext et l'utilisation --module=ext en démarrant la jetée (En savoir plus sur classpath: https://www.eclipse.org/jetty/documentation/9.4.x/startup-classpath.html)

Maintenant, la webapp peut utiliser cette implémentation de JAAS. La webapp ne doit pas déclarer l'implémentation de JAAS dans sa dépendance (fichier POM). Même si elle peut utiliser la mise en œuvre JAAS personnalisé avant par la configuration comme dans la jetée Doc: https://www.eclipse.org/jetty/documentation/9.4.x/jaas-support.html

+0

PS: Quelques informations sur Classloader: * https://stackoverflow.com/questions/42720149/the-secureclassloaders-purpose * https://docs.oracle.com/javase/7/docs/api/java/security/SecureClassLoader.html – lazyboy