【问题标题】:Tomcat ClassCastException due to ClassLoadersTomcat ClassCastException 由于 ClassLoaders
【发布时间】:2020-05-05 14:28:56
【问题描述】:

我在 Tomcat 中实现自己的身份验证过滤器时遇到了一些问题。当我部署项目时,我得到以下日志:

引起:java.lang.ClassCastException:类 com.somename.sec.sso.camunda.KeycloakSSOAuthenticationProvider 不能 上课 org.camunda.bpm.engine.rest.security.auth.AuthenticationProvider (com.somename.sec.sso.camunda.KeycloakSSOAuthenticationProvider 在 加载器 java.net.URLClassLoader @6fc6f14e 的未命名模块; org.camunda.bpm.engine.rest.security.auth.AuthenticationProvider 在 loader的未命名模块 org.apache.catalina.loader.ParallelWebappClassLoader @7a498efa)

这很奇怪,因为我的 KeycloakSSOAuthenticationProvider 实现了 AuthenticationProvider。显然,由于不同的类加载器,转换失败。我想当我定义身份验证过滤器时,我的 web.xml 文件中的转换失败:

<!-- Container Based Authentication filter -->
  <filter>
    <filter-name>Container Based Authentication Filter</filter-name>
    <filter-class>org.camunda.bpm.webapp.impl.security.auth.ContainerBasedAuthenticationFilter</filter-class>
    <init-param>
      <param-name>authentication-provider</param-name>
      <param-value>com.somename.sec.sso.camunda.KeycloakSSOAuthenticationProvider</param-value>
    </init-param>
  </filter>

有没有办法强制KeycloakSSOAuthenticationProvider 加载与AuthenticationProvider 相同的类加载器?或者我应该如何解决这个问题?

【问题讨论】:

    标签: java tomcat casting classloader camunda


    【解决方案1】:

    我在使用 Keycloak 时遇到了类似的铸造错误。对我来说,问题是在 Tomcat(不是嵌入式 tomcat)上运行 keycloak 的设置的一部分,您必须将许多 keycloak 库文件复制到 tomcat_home/lib 目录中。然后,您还需要那些可用于您的 java 代码的库,因此它们也包含在 POM 文件中。

    解决方案是在 pom 文件中为 keycloak 依赖项设置 provided。这样代码可以编译,但在运行时类路径上不会有两个版本的类。

    【讨论】:

      猜你喜欢
      • 2016-10-02
      • 1970-01-01
      • 2011-03-20
      • 2019-05-08
      • 2011-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多