由于以下原因导致的错误:java.lang.ClassNotFoundException Keycloak

error due to the following reason(s): java.lang.ClassNotFoundException Keycloak

我在使用 Keycloak 部署应用程序时遇到问题:

DEPLOYMENTS IN ERROR: Deployment "vfs:///D:/jboss-6.1.0.Final/jboss-6.1.0.Final/server/default/deploy/keycloak-demo-ear.ear" is in error due to the \ following reason(s): java.lang.ClassNotFoundException: javax.faces.component.UIComponent from BaseClassLoader@6929c1c6{vfs:///D:/jboss-6.1.0.Final/jboss-6.1.0.Final/server/default/deploy/keycloak-demo-ear.ear}

或这个:

DEPLOYMENTS IN ERROR: Deployment "vfs:///D:/jboss-6.1.0.Final/jboss-6.1.0.Final/server/default/deploy/keycloak-demo.ear" is in error due to the following reason(s): org.jboss.deployers.spi.DeploymentException: URL file:/D:/jboss-6.1.0.Final/jboss-6.1.0.Final/server/default/deploy/keycloak-demo-ear.ear/keycloak-demo-web.war/ deployment failed

将以下代码添加到 web.xml

时出现错误
<login-config>
    <auth-method>KEYCLOAK</auth-method>
    <realm-name>demo</realm-name>
</login-config>

我已经从管理控制台在 WEB-INF 中创建了 keycloak.json,例如:

{
  "realm": "demo",
  "realm-public-key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrVrCuTtArbgaZzL1hvh0xtL5mc7o0NqPVnYXkLvgcwiC3BjLGw1tGEGoJaXDuSaRllobm53JBhjx33UNv+5z/UMG4kytBWxheNVKnL6GgqlNabMaFfPLPCF8kAgKnsi79NMo+n6KnSY8YeUmec/p2vjO2NjsSAVcWEQMVhJ31LwIDAQAB",
  "auth-server-url": "http://localhost:8080/auth",
  "ssl-required": "external",
  "resource": "panel",
  "credentials": {
    "secret": "6c3fa646-f033-4864-8b87-604887ce8eec"
  }
}

我从 redme 文件添加到 Keycloak 配置到 standalone/configuration/standalone。xml:

对于 WildFly 和 JBoss EAP 6.x

<extensions>
    <extension module="org.keycloak.keycloak-subsystem"/>
    ...
</extensions>

<profile>
    <subsystem xmlns="urn:jboss:domain:keycloak:1.0">
        <auth-server name="main-auth-server">
            <enabled>true</enabled>
            <web-context>auth</web-context>
        </auth-server>
    </subsystem>
    ...
</profile>

我正在使用这个 keycloak (keycloak-appliance-dist-all-1.1.0.Final) http://sourceforge.net/projects/keycloak/files/1.1.0.Final/keycloak-appliance-dist-all-1.1.0.Final.zip/download

我成功部署了包中的示例 keycloak 1.1.0,并想在我的应用程序中使用 keycloak。我做错了什么?

编辑:

我想我找到了导致问题的元素:

<parent>
    <artifactId>keycloak-parent</artifactId>
    <groupId>org.keycloak</groupId>
    <version>1.1.0.Final</version>
    <relativePath>../../../pom.xml</relativePath>
</parent>

当我从示例项目中删除此 parent 时,它停止工作

我的应用程序结构是

mainapp
... pom.xml
... module1 ... pom.xml
... module2 ... pom.xml
... module3 ... pom.xml

每个模块有 parentmainapp

当我从 keycloak 添加父级到 mainapp pom.xml 我在其他模块的 pom.xml 中的 parentmainapp 有错误喜欢:

Plugin execution not covered by lifecycle configuration:

我也尝试将 dependency 添加到 keycloak-parent 但 id 仍然不起作用

我该如何解决这个问题?

为了让您的应用程序与 keycloak 一起工作,您必须在您的服务器上安装一个适配器。以下是详细信息: https://docs.jboss.org/keycloak/docs/1.1.0.Final/userguide/html/ch08.html

您可以在您的 WEB-INF/ 中部署 keycloak 子系统或 keycloak.json 文件。这两种情况都必须安装适配器 此致

Keycloak 由一个服务器(Keycloak 服务器)和一个保护您的应用程序并处理身份验证的适配器组成。如果您将自己的应用程序部署在与 Keycloak 服务器相同的服务器中,则需要将 Keycloak 适配器添加到服务器,如前所述(请参阅 Keycloak adapters)。最新版本的 Keycloak 作为预配置的 Wildfly 9 提供,因此可能适合您的应用程序。还有用于其他容器或纯 HTML 客户端的适配器。

从你的问题来看,我猜你正在尝试将 Keycloak 示例修改为你自己的应用程序。 Keycloak 示例使用共享的父 POM,因此它可能希望将其拆分为单个 POM 以获得更好的概览。或者,根据您的专业知识,您可以从具有 JAAS 安全性的基本 JEE 应用程序开始,并将其部署到 Keycloak 服务器(安装 JBoss/Wildfly 适配器)。参见例如Oracle's JEE 6 Tutorial.