0

我正在为 Keycloak 编写自定义身份验证 SPI。要验证 cookie,我想使用 keycloak-services 的 AuthenticationManager。我在项目中添加了 keycloak-services 作为 maven 依赖项。它没有给出任何编译错误,但是在 Keycloak 上部署 SPI 后,它把我抛到了异常之下。

这是例外:

错误 [org.keycloak.services.error.KeycloakErrorHandler](默认任务 68)未捕获的服务器错误:java.lang.NoClassDefFoundError: org/keycloak/services/managers/AuthenticationManager 在 org.keycloak.examples.authenticator.SecretQuestionAuthenticator.authenticate( SecretQuestionAuthenticator.java:102) 在 org.keycloak.authentication.DefaultAuthenticationFlow.processFlow(DefaultAuthenticationFlow.java:200) 在 org.keycloak.authentication.AuthenticationProcessor.authenticateOnly(AuthenticationProcessor.java:853) 在 org.keycloak.authentication.AuthenticationProcessor.authenticate (AuthenticationProcessor.java:722) 在 org.keycloak.protocol.AuthorizationEndpointBase.handleBrowserAuthenticationRequest(AuthorizationEndpointBase.java:145) 在 org.keycloak.protocol.oidc.endpoints。AuthorizationEndpoint.buildAuthorizationCodeAuthorizationResponse(AuthorizationEndpoint.java:395) 在 org.keycloak.protocol.oidc.endpoints.AuthorizationEndpoint.build(AuthorizationEndpoint.java:139)

Maven 依赖

<dependencies>
<dependency>
    <groupId>org.keycloak</groupId>
    <artifactId>keycloak-core</artifactId>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.keycloak</groupId>
    <artifactId>keycloak-server-spi</artifactId>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.keycloak</groupId>
    <artifactId>keycloak-server-spi-private</artifactId>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.jboss.logging</groupId>
    <artifactId>jboss-logging</artifactId>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.keycloak</groupId>
    <artifactId>keycloak-services</artifactId>
    <scope>provided</scope>
</dependency>
</dependencies>
4

1 回答 1

0

事实证明,我部署代码的方式导致了这个问题。我正在使用 Keycloak 部署代码

mvn clean install wildfly:deploy

当我们使用上述命令部署代码时,它无法在 keycloak 上下文中加载 jar 文件。为了让它工作,我们必须使用Keycloak SPI中提到的模块结构来部署代码。当我们使用模块方法部署代码时,我们可以在新创建的模块的module.xml文件中添加依赖,然后可以在代码中使用。

于 2018-03-12T06:14:19.680 回答