成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring Boot 基于 SCRAM 認證集成 Kafka 的詳解

開發 前端
我們成功地在 Spring Boot 應用中集成了 Kafka,并使用 SCRAM 認證機制進行安全連接;確保在生產環境中妥善管理用戶憑證,并根據需要調整 Kafka 的安全配置。

一、說明

在現代微服務架構中,Kafka 作為消息中間件被廣泛使用,而安全性則是其中的一個關鍵因素。在本篇文章中,我們將探討如何在 Spring Boot 應用中集成 Kafka 并使用 SCRAM 認證機制進行安全連接;并實現動態創建賬號、ACL 權限、Topic,以及生產者和消費者等操作。

需要準備一個配置了 SCRAM 認證的 Kafka 環境,可參考《基于 SASL/SCRAM 讓 Kafka 實現動態授權認證》 進行部署。

二、添加依賴

在 Spring Boot 項目的 pom.xml 中添加 spring-kafka 依賴

<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
</dependency>

三、配置 Kafka

在 application.yml 中配置 Kafka 的相關屬性,包括服務器地址、認證信息等。

spring:  
  kafka:  
    bootstrap-servers: localhost:9092  
    properties:  
      security.protocol: SASL_PLAINTEXT  
      sasl.mechanism: SCRAM-SHA-256 
      sasl.jaas.config: org.apache.kafka.common.security.scram.ScramLoginModule required username="your_username" password="your_password";
    consumer:
      group-id: test-consumer-group
      auto-offset-reset: earliest
      properties:
        sasl.jaas.config: org.apache.kafka.common.security.scram.ScramLoginModule required username="test" password="test";
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
  • bootstrap-servers Kafka 的集群地址
  • security.protocol 通訊協議指定啟用SASL
  • sasl.mechanism 指定 SASL 使用的具體身份驗證機制
  • sasl.jaas.config 指定認證模塊的處理類以及 「用戶名」 和 「密碼」
  • auto-offset-reset 指定偏移量的邏輯,「earliest」 代表新加入的消費者都是從頭開始消費

四、動態管理資源

4.1. 創建 KafkaAdminClient

KafkaAdminClient 用于管理 Kafka 資源(用戶、ACL、主題等)。以下是示例代碼:

@Configuration
public class KafkaConfig {
    @Bean
    public KafkaAdminClient kafkaAdminClient(KafkaAdmin kafkaAdmin) {
        return (KafkaAdminClient) KafkaAdminClient.create(kafkaAdmin.getConfigurationProperties());
    }
}

4.2. 動態創建用戶和設置權限

使用 Kafka AdminClient API 實現動態創建用戶和設置 ACL 權限:

/**
 * 創建用戶
 */
public void createUser(String userName, String password) throws ExecutionException, InterruptedException {
    // 構造Scram認證機制信息
    ScramCredentialInfo info = new ScramCredentialInfo(ScramMechanism.SCRAM_SHA_256, 8192);
    //用戶信息
    UserScramCredentialAlteration userScramCredentialAdd = new UserScramCredentialUpsertion(userName, info, password);
    AlterUserScramCredentialsResult result = kafkaAdminClient.alterUserScramCredentials(List.of(userScramCredentialAdd));
    result.all().get();
}

/**
 * 配置用戶只讀權限
 */
public void createAcl(String account, String topicName, String consumerGroup) {
    AclBinding aclBindingTopic = genAclBinding(account, ResourceType.TOPIC, topicName, AclOperation.READ);
    AclBinding aclBindingGroup = genAclBinding(account, ResourceType.GROUP, consumerGroup, AclOperation.READ);
    kafkaAdminClient.createAcls(List.of(aclBindingTopic, aclBindingGroup));
}

4.3. 動態創建主題

public void createTopic(String topicName, int partitions, short replicationFactor) throws ExecutionException, InterruptedException {
    NewTopic newTopic = new NewTopic(topicName, partitions, replicationFactor);
    CreateTopicsResult result = kafkaAdminClient.createTopics(List.of(newTopic));
    result.all().get();
}

五、生產者和消費者配置

5.1. 生產者配置

配置 Kafka 生產者,用于發送消息:

@Service
public class KafkaProducer {
    private final KafkaTemplate<String, String> kafkaTemplate;

    public KafkaProducer(KafkaTemplate<String, String> kafkaTemplate) {
        this.kafkaTemplate = kafkaTemplate;
    }

    public void sendMessage(String message) {
        kafkaTemplate.send("test", message);
    }
}

5.2. 消費者配置

使用 @KafkaListener 注解實現消費消息方法:

@Service
public class KafkaConsumer {
    @KafkaListener(topics = "test", groupId = "test-consumer-group")
    public void consume(String message) {
        System.out.println("Received message: " + message);
    }
}

六、總結

通過以上步驟,我們成功地在 Spring Boot 應用中集成了 Kafka,并使用 SCRAM 認證機制進行安全連接;確保在生產環境中妥善管理用戶憑證,并根據需要調整 Kafka 的安全配置。

完整的樣例代碼下載:

https://gitee.com/zlt2000/kafka-scram-demo

責任編輯:武曉燕 來源: 陶陶技術筆記
相關推薦

2019-12-03 11:00:08

spring bootspring-kafkJava

2021-12-28 11:13:05

安全認證 Spring Boot

2024-04-03 15:40:14

WebSocketWeb應用Spring

2025-05-06 03:10:00

KEDASpringRocketMQ

2024-01-02 07:04:23

2020-04-23 15:59:04

SpringKafka集群

2020-11-02 07:00:29

Spring Boo注解自動化

2017-04-26 11:00:34

Spring BootHelloWorld詳解

2024-12-16 08:10:00

Spring開發

2024-11-21 14:42:31

2025-01-15 08:19:12

SpringBootRedis開源

2024-08-13 08:41:18

2022-06-28 15:04:32

容器Docker

2022-06-28 15:06:35

容器Spring

2020-07-14 11:00:12

Spring BootRedisJava

2018-11-02 15:45:41

Spring BootRedis數據庫

2025-02-28 08:14:53

2023-01-10 07:52:15

2020-09-02 17:28:26

Spring Boot Redis集成

2022-05-25 09:00:00

令牌JWT安全
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品综合一区二区 | 亚洲国产网址 | 色视频网站在线观看 | 日本中文字幕视频 | 亚洲一区二区三区在线 | 蜜桃免费一区二区三区 | 国产日产欧产精品精品推荐蛮挑 | 日韩成人在线免费视频 | 99视频免费播放 | 欧美日日 | 羞羞免费网站 | 精品久久香蕉国产线看观看亚洲 | 亚洲国产成人精品久久久国产成人一区 | www狠狠干 | 一级做a爰片久久毛片免费看 | 日韩视频一区二区 | 久久精品黄色 | 久久四虎| 久久久久久久综合 | 国产一区三区在线 | 国产黄色精品在线观看 | 欧美成人一区二区三区 | 色综合久| 欧美日韩综合 | 91秦先生艺校小琴 | 国产美女视频黄a视频免费 国产精品福利视频 | 成人国产一区二区三区精品麻豆 | 亚洲国产成人精品女人久久久 | 成人影院一区二区三区 | 成人一区二区电影 | 中文字幕亚洲视频 | 国产欧美精品区一区二区三区 | 亚洲国产成人精品久久久国产成人一区 | 久久久久国产精品午夜一区 | 亚洲va在线va天堂va狼色在线 | 91精品国产综合久久香蕉922 | 久久精品这里 | 国产精品久久亚洲7777 | 午夜久草 | 精品国产第一区二区三区 | 久久中文字幕一区 |