我尝试在我的Keycloak服务器上创建一个自定义资源来扩展它的rest API。所以我实现了一个SPI。从一个hello world开始。
目前,我的目标是通过http://localhost:8080/auth/admin/realms/myRealm/hello上的GET获得“hello”+名称
我使用Postman来请求服务器。我能够在myRealm上获得一个用户令牌。我选择了一个用户,在realm-managment
Map器中为该用户分配了角色View-users
。
因此,内置的Keycloak管理API工作。例如:http://localhost:8080/auth/admin/realms/myRealm/users/count返回预期的用户计数。
但问题是我得到了一个“错误”:“复位003210:找不到完整路径的资源:“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
的依赖项
领域资源提供程序实现:
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
。
5条答案
按热度按时间kiayqfof1#
所以正如alexb 83所说,我错过了url中的第二个/hello。
正如PotatoesMaster所说,我不得不在URL中省略/admin。
此外,文件
org.keycloak.services.resource.RealmResourceProviderFactory
位于错误的文件夹中:我错过了**\服务**。工作路径为:
src\main\resources\META-INF\services\org.keycloak.services.resource.RealmResourceProviderFactory
fdx2calv2#
@alexb83的answer对我不起作用,我不得不省略url中的
/admin
部分:gfttwv5a3#
在我的例子中,当访问端点时,我混淆了url中子路径的顺序,也就是说
/用户/自定义用户
我已经给了
/自定义用户/用户
gopyfrb34#
在我的例子中,我不得不省略
/auth/admin
,所以我的最终工作地址是:网址:vxbzzdmp5#
试试这个:
网址:http://localhost:8080/auth/admin/realms/myrealm/hello
因为第一个"hello"是工厂ID的名称,而第二个"hello"是您在服务上设置的路径。