- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Quarkus 编写一套服务框架。这些服务被设计为 Multi-Tenancy ,并且应该使用 KeyCloak 进行保护。每个租户都有一个单独的 KeyCloak 安全领域,有自己的一组用户、组、角色等。
我找到了Quarkus guide to KeyCloak protection ,解释如何使用 KeyCloak 配置 JAX-RS 进行授权。但是,本指南仅假设 1 个 KeyCloak 领域。我还找到了this example显示如何将 WAR 文件部署到 Wildfly,该文件根据指定的领域加载多个 KeyCloak 领域配置文件之一。
但是,尚不清楚此代码是否可以转换为 Quarkus。
是否可以通过这种方式动态加载 Quarkus 中的 KeyCloak 配置?有没有更好的方法来为这些 Quarkus 服务实现 Multi-Tenancy 安全?
更新:根据下面 Pedro 和 Shadov 的建议,我添加了一个非常简单的 KeycloakConfigResolver
实现,并将其标记为 @ApplicationScoped
。但是,当我尝试启动 Quarkus 时,出现以下异常,并且从未看到我的自定义 KeycloakConfigResolver
被调用:
17:53:55,340 INFO [io.qua.dep.QuarkusAugmentor] Beginning quarkus augmentation
17:53:55,758 INFO [org.jbo.threads] JBoss Threads version 3.0.0.Beta4
17:53:56,888 INFO [org.hib.Version] HHH000412: Hibernate Core {5.4.3.Final}
17:53:57,812 INFO [io.qua.dep.QuarkusAugmentor] Quarkus augmentation completed in 2472ms
17:53:57,967 ERROR [io.qua.dev.DevModeMain] Failed to start quarkus: java.lang.ExceptionInInitializerError
at java.base/java.lang.J9VMInternals.ensureError(J9VMInternals.java:193)
at java.base/java.lang.J9VMInternals.recordInitializationFailure(J9VMInternals.java:182)
at java.base/java.lang.J9VMInternals.newInstanceImpl(Native Method)
at java.base/java.lang.Class.newInstance(Class.java:2082)
at io.quarkus.runner.RuntimeRunner.run(RuntimeRunner.java:117)
at io.quarkus.dev.DevModeMain.doStart(DevModeMain.java:166)
at io.quarkus.dev.DevModeMain.main(DevModeMain.java:88)
Caused by: java.lang.RuntimeException: Failed to start quarkus
at io.quarkus.runner.ApplicationImpl1.<clinit>(ApplicationImpl1.zig:333)
... 5 more
Caused by: java.lang.RuntimeException: com.fasterxml.jackson.databind.exc.MismatchedInputException: No content to map due to end-of-input
at [Source: UNKNOWN; line: 1, column: 0]
at org.keycloak.adapters.KeycloakDeploymentBuilder.loadAdapterConfig(KeycloakDeploymentBuilder.java:198)
at org.keycloak.adapters.KeycloakDeploymentBuilder.build(KeycloakDeploymentBuilder.java:187)
at io.quarkus.keycloak.KeycloakTemplate.createKeycloakDeploymentContext(KeycloakTemplate.java:36)
at io.quarkus.deployment.steps.KeycloakAdapterProcessor$configureAdapter5.deploy_0(KeycloakAdapterProcessor$configureAdapter5.zig:47)
at io.quarkus.deployment.steps.KeycloakAdapterProcessor$configureAdapter5.deploy(KeycloakAdapterProcessor$configureAdapter5.zig:106)
at io.quarkus.runner.ApplicationImpl1.<clinit>(ApplicationImpl1.zig:207)
... 5 more
Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: No content to map due to end-of-input
at [Source: UNKNOWN; line: 1, column: 0]
at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)
at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4145)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4000)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3070)
at org.keycloak.adapters.KeycloakDeploymentBuilder.loadAdapterConfig(KeycloakDeploymentBuilder.java:196)
... 10 more
17:53:57,968 ERROR [io.qua.dev.DevModeMain] Failed to start Quarkus, attempting to start hot replacement endpoint to recover
17:53:58,003 INFO [org.xnio] XNIO version 3.7.2.Final
17:53:58,017 INFO [org.xni.nio] XNIO NIO Implementation Version 3.7.2.Final
我的自定义KeycloakConfigResolver
是空的,除了一些日志记录语句。我从未看到我的 resolve
方法被调用或任何日志记录语句。下面是实现的样子:
@ApplicationScoped
public class MultiTenantKeycloakConfigResolver implements KeycloakConfigResolver {
/**
* Logger for this class
*/
private static final Logger logger = LoggerFactory.getLogger(MultiTenantKeycloakConfigResolver.class);
/*
* (non-Javadoc)
*
* @see
* org.keycloak.adapters.KeycloakConfigResolver#resolve(org.keycloak.adapters.
* spi.HttpFacade.Request)
*/
@Override
public KeycloakDeployment resolve(Request facade) {
if (logger.isDebugEnabled()) {
logger.debug("resolve(Request) - start"); //$NON-NLS-1$
}
if (logger.isInfoEnabled()) {
logger.info("resolve(Request) - HERE!!!"); //$NON-NLS-1$
}
// TODO Implement method
if (logger.isDebugEnabled()) {
logger.debug("resolve(Request) - end"); //$NON-NLS-1$
}
return null;
}
}
最佳答案
@Shadov,是对的。您需要一个KeycloakConfigResolver
。
使用 Quarkus,您只需创建一个实现 KeycloakConfigResolver
的类。类似于 this .
我将更新指南并提供一些与此相关的引用。
关于java - 带有 KeyCloak 的 Multi-Tenancy Quarkus?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56782154/
对于我积极维护的客户基于 Web 的 CRM 的分支机构数量不断增加的 Multi-Tenancy ,我需要做出一个艰难的数据库设计决策。 我很早就决定为每个分支使用具有单独数据库的单独应用程序,因为
在 Spring 3 应用程序中,我试图通过 Hibernate 4 的原生 MultiTenantConnectionProvider 实现 Multi-Tenancy 。和 CurrentTena
在neo4j中实现 Multi-Tenancy 的最佳方法是什么? 我看过 Tinkerpop 和 Spring Data。 我有多个客户端,我想将客户端信息存储在自己的数据库中以确保安全。 我不想使
我正在一个小团队工作,设计一个流程管理系统,供同一行业内的几个不同客户使用。系统的目标和客户的高水平要求非常相似。然而,正如预期的那样——一旦我们开始深入挖掘他们的个人需求,我们最终会为每个客户进行一
我们正在开发一个“中间层”来替换现有的业务逻辑/数据访问层。我们面临的设计问题之一是,我们需要以一种允许多个客户的数据库和/或中间层部件作为我们托管产品的一部分存在于同一服务器上的方式进行设计。托管环
我有一个非常简单的项目,其中包含一个具有以下 models.py 的应用程序: class UserAccount: user = models.OneToOneField(User)
在我的应用程序中,我想为不同的客户实现 Multi-Tenancy 支持。 我有一个节点树,希望为不同的客户实现私有(private)树的支持。 Neo4j 是否支持 Multi-Tenancy ,或
我似乎找不到任何关于具有多个数据库的 Grails Multitenancy(每个租户一个)的更新资源/指南、插件或示例。我目前被困在 https://grails.org/plugin/multi-
在我的 Laravel 项目中,我使用了 Multi-Tenancy 。对于项目相关的工作,我正在创建一个 laravel 自定义 artisan 命令。我正在尝试在我正在创建的那个 artisan
我想实现 OKTA API 来管理 Multi-Tenancy 环境中的身份验证和 SSO。 每个用户都应该链接到一个租户,并且每个租户都应该配置身份验证策略。有没有办法实现这一目标? 最佳答案 Ok
我在网上阅读了几篇关于 Multi-Tenancy (针对 SaaS 应用程序中的不同客户)的文章(即 this 和 that 和 that)。一旦您决定采用基于鉴别器的方法,hibernate do
我有几个客户端使用的数据库。我真的不希望代理增量键值在客户端之间流血。我希望编号从1开始,并且要针对客户。 我将使用tenant_id的两部分组合键以及增量ID。 为每个租户创建增量 key 的最佳方
我正在开发一个定制的CRM解决方案,该解决方案将通过Web/SaaS模型出售。我预计会有数十或数百个客户使用此解决方案。我将使用MS SQL作为数据库引擎。 选项1是拥有一个数据库,并在表上包括一个T
我开始设计 Multi-Tenancy 系统并且已经阅读了这篇文章: http://msdn.microsoft.com/en-us/library/aa479086.aspx 无论如何,我有几个与身
我正在考虑在 Multi-Tenancy 应用程序中使用 Solr,我想知道是否有任何最佳实践或需要注意的事项? 一个特别的问题是每个租户拥有一个 Solr Core 是否有意义。有大量的 Solr
由于我对 redis 还很陌生,因此我正在尝试探索各种选项,看看如何使用 redis 实现 Multi-Tenancy 。 我在 redisLabs 官方页面上阅读了一些文档,看起来 redis 集群
我们有一个应用程序,可以在 Multi-Tenancy 工作区的服务器上执行大量数据繁重的工作。 以下是它所做的事情: 它从不同文件格式的文件加载数据。 根据定义的逻辑执行幂等规则。 执行处理逻辑,例
我们有一个 Multi-Tenancy Azure 广告应用程序,该应用程序在某些其他租户中不可见。是否有允许第三方应用程序的租户级别设置? 我们从 azure cli 运行以下命令来查看 hte 应
我尝试登录 Azure AD Web 应用程序,当我使用租户内的用户登录时,就可以了,但是当登录其他用户时我得到 AADSTS50020:来自身份提供商“live.com”的用户帐户“********
我正在将 Firebase 视为 MVP Multi-Tenancy 应用的后端。该应用程序将为每个租户提供完全白标,每个租户都注册自己的用户群。肯定会有交叉,用户可以注册多个租户,但是我似乎看不到
我是一名优秀的程序员,十分优秀!