gpt4 book ai didi

java - 实现 SPI 以扩展 Keycloak API - 找不到资源

转载 作者:行者123 更新时间:2023-12-05 00:56:43 26 4
gpt4 key购买 nike

我正在尝试在我的 Keycloak 服务器上创建一个自定义资源以扩展其其余 API。所以我正在实现一个SPI。从一个 hello world 开始。

目前我的目标是通过 http://localhost:8080/auth/admin/realms/myRealm/hello 上的 GET 获取“你好”+ 名称

我使用 Postman 来请求服务器。我能够在 myRealm 上获得用户 token 。我选择了一个我为其分配了角色 View-users 的用户在 realm-managment映射器。

所以内置的 Keycloak Admin API 可以工作。例如:http://localhost:8080/auth/admin/realms/myRealm/users/count 返回预期的用户数。

但问题是我得到了一个“错误”:“RESTEASY003210:找不到完整路径的资源:http://localhost:8080/auth/admin/realms/myRealm/hello/” 请求此端点时。

这是我的设置(我阅读了几个指南):

模块项目的 pom.xml 包含对 keycloak-core 的依赖项keycloak-server-spi keycloak-server-spi-private org.jboss.spec.javax.ws.rs

RealmResourceProvider 实现:

public class HelloWorldProvider implements RealmResourceProvider {

private KeycloakSession session;

public HelloWorldProvider(KeycloakSession session) {
this.session = session;
}

@Override
public Object getResource() {
return this;
}

@GET
@Path("/hello")
@Produces("text/plain; charset=utf-8")
public String get() {
String name = session.getContext().getRealm().getDisplayName();
if (name == null) {
name = session.getContext().getRealm().getName();
}
return "Hello" + name;
}

@Override
public void close() {
}
}

工厂实现:

public class HelloWorldProviderFactory implements RealmResourceProviderFactory {

public static final String ID = "hello";

@Override
public String getId() {
return ID;
}

@Override
public int order() {
return 0;
}

@Override
public RealmResourceProvider create(KeycloakSession keycloakSession) {
return new HelloWorldProvider(keycloakSession);
}

@Override
public void init(Config.Scope scope) {
}

@Override
public void postInit(KeycloakSessionFactory keycloakSessionFactory) {
}

@Override
public void close() {
}
}

我还创建了文件 src\main\resources\META-INF\org.keycloak.services.resource.RealmResourceProviderFactory它包含对我的 HelloWorldProviderFactory 的引用

打包 jar 后,我把它的副本放在keycloak-9.0.3\standalone\deployments在运行 standalone.bat 之后文件 keycloak-spi-rest-hello-1.0.jar.deployed已创建。

最佳答案

试试这个:

http://localhost:8080/auth/admin/realms/myRealm/hello/hello

因为第一个“hello”是您的工厂 ID 的名称,而第二个“hello”是您在服务上设置的路径。

关于java - 实现 SPI 以扩展 Keycloak API - 找不到资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61818280/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com