栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

springboot链接mongodb采用SSL方式

Java 更新时间:发布时间: 百科书网 趣学号

准备好证书
1、AbstractMongoConfig

@Data
public abstract class AbstractMongoConfig {
    protected String host, database, username, password;
    protected int port;

    public MongoDatabaseFactory mongoDatabaseFactory() {
        String url = "mongodb://" + username + ":" + password + "@" + host + ":" + port + "/" + database;
        return new SimpleMongoClientDatabaseFactory(url);
    }

    public abstract MongoTemplate getMongoTemplate() throws Exception;
}

2、MongoSSLConfig

import com.mongodb.MongoClientSettings;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory;

import java.util.Arrays;

@Configuration
@ConfigurationProperties(prefix = "spring.data.mongodb")
public class MongoSSLConfig extends AbstractMongoConfig {

    public @Bean
    MongoTemplate getMongoTemplate() throws Exception {
        return new MongoTemplate(mongoDatabaseFactory());
    }

    @Bean
    public MongoDatabaseFactory mongoDatabaseFactory() {
        MongoClient mongoClient = MongoSSLConfig.createNetworkMongoClient(host, database, username, password, port);
        return new SimpleMongoClientDatabaseFactory(mongoClient, database);
    }

    public static MongoClient createNetworkMongoClient(String host, String database, String username, String password, int port) {
        MongoCredential credential = getCredentials(username, database, password);
        MongoClientSettings settings = MongoClientSettings.builder()
                .credential(credential)
                .applyToSslSettings(builder -> {
                    builder.enabled(true); // 开启ssl连接
                    builder.invalidHostNameAllowed(true); // 禁用主机名验证
                })
                .applyToClusterSettings(builder ->
                        builder.hosts(Arrays.asList(new ServerAddress(host, port))))
                .build();
        MongoClient mongoClient = MongoClients.create(settings);
        return mongoClient;
    }

    private static MongoCredential getCredentials(String username, String database, String pass) {
        char[] password = pass.toCharArray();
        return MongoCredential.createCredential(username, database, password);
    }

}

3、启动类

@Slf4j
@EnableAspectJAutoProxy(exposeProxy = true)
@EnableTransactionManagement
@SpringBootApplication(scanBasePackages = "com.dragon.flow", exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
public class HopeFlowAdminApplication {
    public static void main(String[] args) throws Exception {
        MongoDbSslUtils.initSsl();
        SpringApplication.run(HopeFlowAdminApplication.class, args);
        log.info("###########################流程后台程序启动成功##################################");
    }
}


public static void initSsl() throws Exception {
File path = new File(ResourceUtils.getURL(“classpath:”).getPath());
if (!path.exists()) path = new File(“”);
String absolutePath = path.getAbsolutePath();
String truststore = absolutePath + File.separator + “key” + File.separator + “rds-truststore.jks”;
String truststorePassword = “password”;
System.setProperty(“javax.net.ssl.trustStore”, truststore);
System.setProperty(“javax.net.ssl.trustStorePassword”, truststorePassword);
}

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/986688.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号