springboot链接mongodb采用SSL方式
·
准备好证书
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("###########################流程后台程序启动成功##################################");
}
}
/**
* 初始化ssl
*
* @return
* @throws Exception
*/
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);
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)