首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Springboot集成使用阿里云kafka详细步骤(3)

Springboot集成使用阿里云kafka详细步骤(3)

外部注入路径变量的方式

我们上面的代码中是把conf文件的路径写死的,如果需要变动地址,可以使用以下方式
环境注入conf文件路径

因为代码中会默认获取环境变量中的java.security.auth.login.config配置,所以只需要启动时 赋值路径即可。

-Djava.security.auth.login.config=你的配置绝对路径



完整启动springboot的项目命令如下:

java -jar /jar/report-api-1.0.0-SNAPSHOT.jar --spring.profiles.active=beta  -Djava.security.auth.login.config=/jar/kafka_client_jaas.conf



变量注入conf文件路径

注意 因为类的初始化在注入变量之前,所以conf的路径不能用变量的方式注入,否则会报空指针错误。

如下用法会报错

    @Value("${kafka.conf.location}")
    private String confLocation;

    public KafkaAliyunConfiguration() {
        // 如果用-D 或者其它方式设置过,这里不再设置
        if (null == System.getProperty("java.security.auth.login.config")) {
            // 请注意将 XXX 修改为自己的路径
            // 这个路径必须是一个文件系统可读的路径,不能被打包到 jar 中
            System.setProperty("java.security.auth.login.config", confLocation);
            System.out.println("使用配置中的路径,kafka配置为:" + System.getProperty("java.security.auth.login.config"));
        } else {
            System.out.println("环境变量中已有config文件,kafka配置为:" + System.getProperty("java.security.auth.login.config"));
        }
    }



安全层面加固

因为直接conf文件中包含帐号密码容易被其他人查看到,有一种方式是外部引入模版文件,使用环境变量中的帐号密码修改conf文件。

模版文件如下:

KafkaClient {
  org.apache.kafka.common.security.plain.PlainLoginModule required
  username="_KAFKA_ALIYUN_USERNAME_"
  password="_KAFKA_ALIYUN_PASSWORD_";
};


使用shell命令从s3中下载conf文件并修改conf文件如下:

      initContainers:
        - name: pull-lib
          image: anigeo/awscli:latest
          command: ["/bin/sh","-c"]
          args: ['aws s3 cp s3://test-env/kafka.client.truststore.jks /jar/ ;aws s3 cp s3://test-env/kafka_client_jaas.conf /jar/ ;sed -i "s/_KAFKA_ALIYUN_USERNAME_/${KAFKA_SSL_USERNAME}/"  /jar/kafka_client_jaas.conf;sed -i "s/_KAFKA_ALIYUN_PASSWORD_/${KAFKA_SSL_PASSWORLD}/"  /jar/kafka_client_jaas.conf']
          env:
            - name: AWS_DEFAULT_REGION
              value: cn-southwest-2
            - name: KAFKA_SSL_USERNAME
              valueFrom:
                secretKeyRef:
                  name: aliyun-kafka
                  key: username
            - name: KAFKA_SSL_PASSWORLD
              valueFrom:
                secretKeyRef:
                  name: aliyun-kafka
                  key: password
          volumeMounts:
            - name: workdir
              mountPath: /jar
返回列表