我正在尝试创建一个使用Java和JBoss WildFly的应用程序。我集成了Spring Security来处理身份验证,并使用自定义用户详细信息服务在数据库中查找用户详细信息。
我有我的EAO写在EJB模块和它被访问的userDeailService在web模块。
但当我登录时,会显示以下错误。
java.lang.LinkageError: loader constraint violation: when resolving interface method "com.company.eao.UserEAO.findByUserName(Ljava/lang/String;)Lorg/springframework/security/core/userdetails/UserDetails;" the class loader (instance of org/jboss/modules/ModuleClassLoader) of the current class, com/company/security/UserDetailServiceWrapper, and the class loader (instance of org/jboss/modules/ModuleClassLoader) for the method's defining class, com/company/eao/UserEAO, have different Class objects for the type org/springframework/security/core/userdetails/UserDetails used in the signature 从文章中我看到似乎EJB模块类加载器和web模块类加载器都加载了UserDetail类母鸡的错误发生了。
如何在WildFly中指定使用一个类加载器,或者如何解决此问题。
提前谢谢。
发布于 2014-11-14 16:29:27
您需要确保两个部署都只使用这个库的一个版本,因为这些部署交换的对象的类是这个库的一部分。您可以通过将lib部署到服务器或为此lib创建wildfly模块来完成此操作。在这两种情况下,您的两个部署都必须声明对该库的依赖关系,您应该没有问题。
上面提到的解决方案应该是可行的,但就我个人而言,我倾向于只使用JDK类或您自己创建的定制库的类作为数据交换类。通过这种方式,您可以减少部署的依赖性,并且不会在引入较新版本的库时遇到麻烦。此外,您可以将库与war/ear打包在一起,并传递您的自定义数据对象,而不会出现问题。
https://stackoverflow.com/questions/26905928
复制相似问题