小编Łuk*_*ski的帖子

如何将@Transactional与@KafkaListener一起使用?

是否有可能将声明式交易管理(通过@Transactional)与@KafkaListener注释方法一起使用?例如,我想使用它来为每个侦听器定义单独的 tx 超时。我的设置如下:

交易管理器:

@Bean
@ConditionalOnBean(value = {HibernateTransactionManager.class})
public ChainedKafkaTransactionManager<Object, Object> chainedHibernateTm(KafkaTransactionManager<String, String> kafkaTransactionManager,
                                                                                 org.springframework.orm.hibernate5.HibernateTransactionManager hibernateTransactionManager) {
  return new ChainedKafkaTransactionManager<>(
    kafkaTransactionManager, 
    hibernateTransactionManager);
}
Run Code Online (Sandbox Code Playgroud)

卡夫卡监听器:

@KafkaListener(topic = "my_topic")
@Transactional(timeout = 5)
public void handleMessage(SomeMessage message){
}
Run Code Online (Sandbox Code Playgroud)

问题是 - KafkaMessageListenerContainer 在调用此类方法之前创建自己的事务 - 它使用自己的 TransactionTemplate:

@Nullable
private TransactionTemplate determineTransactionTemplate() {
  return this.transactionManager != null
    ? new TransactionTemplate(this.transactionManager)
    : null;
}

Run Code Online (Sandbox Code Playgroud)

未使用 TransactionInterceptor。那么如何为具体的 @KafkaListener 方法设置特定的 tx 超时呢?

java spring-transactions spring-boot spring-kafka

7
推荐指数
1
解决办法
5988
查看次数

使用外部身份提供商 (IDP) 通过 KeyCloak 进行直接访问授权

我想使用“直接访问授权”对 KeyCloak 进行身份验证: https: //www.keycloak.org/docs/latest/server_admin/index.html#resource-owner-password-credentials-grant-direct-access-grants

当 keycloak 自己管理用户和密码时,我的工作就像一个魅力。

但是,我的情况有所不同:

我希望 keycloak 充当某些外部 IDP 的经纪人。KeyCloak 具有身份代理功能 - 但仅适用于“授权代码流程” - 将用户重定向到外部 IDP 登录表单。我有移动应用程序,希望使用“直接访问授权” - 以便应用程序与 keycloak 通信来验证用户 - 并且 keycloak 作为代理,在外部 IDP 中验证此用户(使用 openid-connect)

如何实现这样的场景?我知道这是不可能的 - 但也许有人可以建议如何编写 keycloak 的扩展来使这种情况成为可能?

java oauth-2.0 openid-connect keycloak idp

6
推荐指数
2
解决办法
2万
查看次数