keycloak~自定义rest接口
2021/5/12 10:59:58
本文主要是介绍keycloak~自定义rest接口,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
rest资源
对于我们集成keycloak来说,你可能会遇到它没有实现的功能,这时需要对kc进行扩展,资源的扩展是其中一个方面,它需要实现RealmResourceProvider
和RealmResourceProviderFactory
两个接口,然后在KC启动之后,它可以被注册到IOC容器里,方便以后我们直接使用。
KC里的扩展是开闭原则OCP的完美体现,扩展在kc里叫SPI,它通过SPI的方式实现对功能的扩展,类似于面向接口的编程,通过META-INF/services里的文件进行注册,这类似于spring里的META-INF/spring.factories的功能。
例子
- 定义一个资源工厂
public class WeixinUserResourceProviderFactory implements RealmResourceProviderFactory { private static final Logger logger = Logger.getLogger(WeixinUserResourceProviderFactory.class); public WeixinUserResourceProviderFactory() { System.err.println("WeixinUserResourceProviderFactory.init"); } /** * 资源提供者名称会在url上体现. * * @return */ @Override public String getId() { return "weixin-api"; } @Override public RealmResourceProvider create(KeycloakSession session) { return new WeixinUserResourceProvider(session); } @Override public void init(Scope config) { } @Override public void postInit(KeycloakSessionFactory factory) { } @Override public void close() { } }
- 定义一个资源的具体实现
public class WeixinUserResourceProvider implements RealmResourceProvider { private final KeycloakSession session; WeixinUserResourceProvider(KeycloakSession session) { this.session = session; } @Override public Object getResource() { return new WeixinUserResource(session); } @Override public void close() { } }
- 具体资源里公开的rest接口
public class WeixinUserResource { private final KeycloakSession session; private final EntityManager em; private final RealmModel realm; public WeixinUserResource(KeycloakSession session) { this.session = session; realm = session.getContext().getRealm(); this.em = session.getProvider(JpaConnectionProvider.class).getEntityManager(); } @GET @NoCache @Produces(APPLICATION_JSON) @Path("user-detail") public UserDetail userDetail(@HeaderParam("Authorization") String authorization, @QueryParam("userId") String userId) { //.... }
对于上面的资源,我们可以通过{kc-host}/auth/realms/{realm-name}/weixin-api/user-detail
地址去访问它,其中,weixin-api表示当前spi factory的ID。
- 向kc注册spi
添加文件resources/META-INF/services/org.keycloak.services.resource.RealmResourceProviderFactory,内容如下
keycloak.services.social.weixin.rest.WeixinUserResourceProviderFactory
- 文件结构如下
这篇关于keycloak~自定义rest接口的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升