Tomcat ClassCastException из-за загрузчиков классов - PullRequest
0 голосов
/ 05 мая 2020

У меня проблемы с реализацией собственного фильтра аутентификации в Tomcat. При развертывании проекта я получаю следующий журнал:

Вызвано: java .lang.ClassCastException: class com.somename.se c .sso.camunda.KeycloakSSOAuthenticationProvider не может быть преобразован в класс org.camunda.bpm.engine.rest.security.auth.AuthenticationProvider (com.somename.se c .sso.camunda.KeycloakSSOAuthenticationProvider находится в безымянном модуле загрузчика java. net .URLClassLoader @ 6fc6f14e; or 6fc6f14e; .camunda.bpm.engine.rest.security.auth.AuthenticationProvider находится в безымянном модуле организации загрузчика. apache .catalina.loader.ParallelWebappClassLoader @ 7a498efa)

Что странно, так как мой KeycloakSSOAuthentication реализует 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 ? Или как мне подойти к этой проблеме?

1 Ответ

0 голосов
/ 29 июля 2020

У меня были похожие ошибки при использовании Keycloak. Проблема для меня заключалась в том, что часть настройки для запуска keycloak на Tomcat (не встроенном tomcat) вы должны скопировать несколько файлов библиотеки keycloak в каталог tomcat_home / lib. Затем вам также понадобятся эти библиотеки, доступные для вашего кода java, поэтому они также были включены в файл POM.

Решением было установить предоставленный для зависимостей keycloak в pom файл. Таким образом, код будет компилироваться, но во время работы в пути к классам не будет двух версий класса.

...