我试图在我的密钥斗篷服务器上创建一个自定义资源来扩展它的Rest应用编程接口。所以我正在实现一个SPI。从你好世界开始。
目前,我的目标是通过一次“上车”获得一个“你好”的名字http://localhost:8080/auth/admin/realms/myRealm/hello
我使用Postman请求服务器。我能够在myRealm上获得用户令牌。我选择一个用户,我已经在领域管理
映射器中为其分配了角色View-user
。
所以内置的keydepeat管理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 keycloak-server-spi-Privateorg.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。钥匙斗篷。服务。资源RealmResourceProviderFactory
它包含对myHelloWorldProviderFactory
打包jar后,我把它的一个副本放在keycloak-9.0.3\独立\部署
中,并在运行standalone.bat
之后创建文件keycloak-spi-rest-hello-1.0.jar.deployed
。
@alexb83的答案对我不起作用,我不得不从网址中省略/admin
部分:
http://localhost:8080/auth/realms/myRealm/hello/hello
正如alexb83所说,我错过了url中的第二个/hello。
正如PotatoesMaster所说,我不得不在url中省略/admin。
另外,文件org.keycloak.services.resource.RealmResourceProviderFactory
位于错误的文件夹中:我错过了\service。
工作路径为:
src\main\resources\META-INF\services\org。钥匙斗篷。服务。资源RealmResourceProviderFactory
试试这个:
http://localhost:8080/auth/admin/realms/myRealm/hello/hello
因为第一个“hello”是工厂ID的名称,而第二个“hello”是您在服务上设置的路径。
描述 SPI 的全名为 : Service Provider Interface。 SPI 具体约定 当服务的提供者,提供了服务接口的一种实现之后,在 jar 包的META-INF/services/ 目录里同时创建一个以 服务接口 命名的文件。该文件里就是实现该服务接口的具体实现类。而 Jboot 装配这个模块的时候,就能通过该 jar 包 META-INF/services/ 里的配置文件找到
一、背景 早在8月份的时候,我就做了一些MR的Join查询,但是发现回北京之后,2个月不用,居然有点生疏,所以今天早上又花时间好好看了一下,顺便写下这个文档,以供以后查阅。 二、环境 JDK 1.6、Linux操作系统、hadoop0.20.2 三、资料数据 在做这个Join查询的时候,必然涉及数据,我这里设计了2张表,分别较data.txt和info.txt,字段之间以t划分。 data.txt
SPI 扩展接口仅用于系统集成,或 Contributor 扩展功能插件。
问题内容: 谁能告诉我第一和第二代码之间的区别是什么?MaxPQ代表优先级队列,它是可以相互比较的“关键”对象的集合。 代码1: 代码2: 第二个代码没有编译,但是对我来说不直观,为什么在使用泛型时为什么需要扩展而不是实现接口。 问题答案: 区别非常简单:第二个代码段不会编译,也永远不会编译。对于泛型,您始终对类和接口都使用。也可以在此处使用关键字,但是它具有不同的语义。
我希望有一个方法返回一个类 ,该类根据作业类型具有不同的方法。 例如,作业类型可以是 或 。它们不共享方法,但需要从单个方法getJob()中获取它们。 现在我有一个普通的类< code>job,它的方法返回< code>null,没有构造函数,因为我在< code>getJob()方法中构造了其他类(例如BackupJob或RunCommandJob)。 在返回单个类的同时获得不同工作类的最佳方
我正试图用三个额外的日期(时间戳)字段扩展扩展扩展名(新闻),并希望在(新闻)的fluidtemplate中调用这些字段。 我已经连线到目前为止,我可以看到我的后端额外的字段,而无需选择一个外部类型-我已经相应地修改了ext_tables.php,并可以保存数据。 现在,我试图在我的新闻流模板中使用这些字段,在我的Partials/List/Item中使用以下代码。html-{newsItem.d