Spring Boot 基于 SCRAM 认证集成 Kafka 的详解
创作时间:
作者:
@小白创作中心
Spring Boot 基于 SCRAM 认证集成 Kafka 的详解
引用
CSDN
1.
https://blog.csdn.net/qq_53723451/article/details/142324947
在现代微服务架构中,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: 通讯协议指定启用SASLsasl.mechanism: 指定SASL使用的具体身份验证机制sasl.jaas.config: 指定认证模块的处理类以及"用户名"和"密码"auto-offset-reset: 指定偏移量的逻辑,"earliest"代表新加入的消费者都是从头开始消费
三、动态管理资源
3.1. 创建KafkaAdminClient
KafkaAdminClient用于管理Kafka资源(用户、ACL、主题等)。以下是示例代码:
@Configuration
public class KafkaConfig {
@Bean
public KafkaAdminClient kafkaAdminClient(KafkaAdmin kafkaAdmin) {
return (KafkaAdminClient) KafkaAdminClient.create(kafkaAdmin.getConfigurationProperties());
}
}
3.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));
}
3.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();
}
四、生产者和消费者配置
4.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);
}
}
4.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的安全配置。
热门推荐
近视科普|近视的中医防控方法有哪些?
2025最新重庆到银川高铁攻略:10小时直达,春运出行新选择
长三角智能网联汽车试验场启用,长城汽车加速布局智能化
金光神咒:道教修身养性的秘籍
《封神演义》中的五行遁术:文学创作与道教文化的融合
道教符咒与易学:你了解多少?
黄帝时期的道教咒语:起源、特点与影响
视同缴费年限对养老金的影响体现在哪些方面?
清江画廊旅游攻略:景点特色、交通指南与游玩建议
世界6大水坝排行,第一位库容量,竟然是三峡大坝的5倍
凉山会理暖冬献礼蓉城 邀你赴一场美食与风情之约
重庆飞银川航班时刻表大揭秘!
清明节重庆到银川高铁购票全攻略
湿疹瘙痒难耐怎么办?分享给您4个中医小方子!
如何减少皮肤瘙痒症的发生
长沙潮宗街:古今交融的网红打卡圣地
10年了,南水北调改变了什么?为何被称为历史上最伟大的工程?
免喷涂塑料:新能源车界的环保新宠
新能源汽车技术新突破:电驱动系统与汽车芯片创新进展
三峡大坝景点介绍及旅游攻略
三发六代机?
重庆到银川自驾游:腾格里沙漠探秘攻略
银川到重庆:高铁还是特价机票?
薛涛的“斗眉”秘籍大揭秘
从默克尔信仰看其领导风格:一位具有道德感的政治领袖
广东新能源汽车产业:从“追赶者”到“领跑者”
Liver Int:肝脏硬度可预测慢性肝病患者发生肝脏相关事件的进展
宜昌自由行攻略:五天四晚玩转宜昌,三峡千古情等你来
八字排盘解析:了解命运与性格的传统方法与技巧
共筑繁荣之路丨雅万高铁正式运行一年 便利出行促经济发展