Jakarta ee 带owne JAAS的码头

Jakarta ee 带owne JAAS的码头,jakarta-ee,jetty,jetty-9,Jakarta Ee,Jetty,Jetty 9,我使用工件实现了一个JAAS LoginModule <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-util</artifactId> <version>${jetty.version}</version> org.eclipse.jetty 码头 ${jetty.version} LoginModule的实现扩展了Jetty文档中建议的类AbstractL

我使用工件实现了一个JAAS LoginModule

<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-util</artifactId>
<version>${jetty.version}</version>
org.eclipse.jetty
码头
${jetty.version}
LoginModule的实现扩展了Jetty文档中建议的类
AbstractLoginModule
。如果我使用
provided
声明
jetty util
的依赖关系,那么我会得到异常

java.lang.NoClassDefFoundError:org/eclipse/jetty/util/security/Credential
原因是:java.lang.ClassNotFoundException:org.eclipse.jetty.util.security.Credential

但是,如果我删除
-标记以将其作为运行时包含在类路径中,那么就会得到异常

javax.security.auth.login.login异常:java.lang.LinkageError:加载程序约束冲突:加载程序(org/codehaus/plexus/classworlds/realm/ClassRealm的实例)先前启动了对名为“org/eclipse/jetty/util/security/Credential”的不同类型的加载。

如果我使用默认的JAAS实现
PropertyFileLoginModule
一切都是现成的。当然,我不必声明这个工件的依赖关系。它包含在jetty maven插件中

当我在maven中运行jetty:run插件时,所有的异常都会发生

我的JAAS实现在一个工件中分离,我的web项目在另一个工件中分离,这是基于github中jetty提供的工件
testJAASWebApp

如何将自己的JASS实现与Jetty Maven插件结合使用


环境:Jetty 9.2.x、Java 1.8_u111、Maven 3

经过一些尝试和错误后,我发现用Maven项目的方式处理Classloader。 第一个JAAS工件:

  • JAAS实现必须在单独的工件中
  • 此工件可以使用jetty util作为依赖项,但仅限于提供的范围
  • 此工件必须作为jetty server的模块加载。一种方法是,将工件的jar放在lib/ext中,并通过启动jetty使用选项
    --module=ext
    (关于类路径的更多信息:)
现在webapp可以使用JAAS的这个实现。webapp不得在其依赖项(POM文件)中声明JAAS的实现。尽管它可以通过Jetty文档中的配置使用定制JAAS实现:

PS:关于类加载器的更多信息:**