A Voyage AI se une ao MongoDB para impulsionar aplicativos de AI mais precisos e confiáveis no Atlas.

Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Como se conectar ao MongoDB com um proxy SOCKS5 com Java

Maxime Beugnet2 min read • Published Aug 29, 2024 • Updated Aug 29, 2024
Facebook Icontwitter iconlinkedin icon
Avaliar este tutorial
star-empty
star-empty
star-empty
star-empty
star-empty

Introdução

SOCKS5 é um protocolo padronizado para comunicação com serviços de rede por meio de um servidor proxy. Ele oferece várias vantagens, como permitir que os usuários alterem sua localização virtual ou ocultem seu endereço IP dos serviços online.
O SOCKS5 também oferece uma camada de autenticação que pode ser usada para melhorar a segurança.
No nosso caso, o serviço de rede é MongoDB. Vamos ver como podemos nos conectar ao MongoDB por meio de um proxy SOCKS5 com Java.

SOCKS5 com Java baunilha

A autenticação é opcional para proxies SOCKS5 . Então, para poder se conectar a um proxy SOCKS5 , você precisa:
  • proxyHost:4 IPv, IPv6 ou nome de host do proxy
  • proxyPort: número da porta TCP 1080(padrão)
Se a autenticação estiver ativada, você também precisará de um nome de usuário e senha. Ambos precisam ser fornecidos, ou não será trabalhar.
  • proxyUsername: o nome de usuário do proxy (não nulo ou vazio)
  • proxyPassword: a senha do proxy (não nula ou vazia)

Usando parâmetros de string de conexão

O primeiro método para se conectar ao MongoDB por meio de um proxy SOCKS5 é simplesmente fornecer os parâmetros acima diretamente na connection string do MongoDB.
1public MongoClient connectToMongoDBSock5WithConnectionString() {
2 String connectionString = "mongodb+srv://myDatabaseUser:myPassword@example.org/" +
3 "?proxyHost=<proxyHost>" +
4 "&proxyPort=<proxyPort>" +
5 "&proxyUsername=<proxyUsername>" +
6 "&proxyPassword=<proxyPassword>";
7 return MongoClients.create(connectionString);
8}

Usando MongoClientSettings

O segundo método envolve passar esses parâmetros para uma classe MongoClientSettings, que é então usada para criar a conexão com o cluster MongoDB.
1public MongoClient connectToMongoDBSocks5WithMongoClientSettings() {
2 String URI = "mongodb+srv://myDatabaseUser:myPassword@example.org/";
3 ConnectionString connectionString = new ConnectionString(URI);
4 Block<SocketSettings.Builder> socketSettings = builder -> builder.applyToProxySettings(
5 proxyBuilder -> proxyBuilder.host("<proxyHost>")
6 .port(1080)
7 .username("<proxyUsername>")
8 .password("<proxyPassword>"));
9 MongoClientSettings settings = MongoClientSettings.builder()
10 .applyConnectionString(connectionString)
11 .applyToSocketSettings(socketSettings)
12 .build();
13 return MongoClients.create(settings);
14}

Conexão com o Spring Boot

Usando parâmetros de string de conexão

Se você estiver usando o Spring Boot ou o Spring Data MongoDB, você pode se conectar dessa forma se estiver passando os parâmetros SOCKS5 em a cadeia de conexão.
Na maioria das vezes, se você estiver usando o Spring Boot ou o Spring Data, precisará do registro do codec para apoie os mapeamentos POJO. Então eu incluí isso também.
1package com.mongodb.starter;
2
3import com.mongodb.ConnectionString;
4import com.mongodb.MongoClientSettings;
5import com.mongodb.client.MongoClient;
6import com.mongodb.client.MongoClients;
7import org.bson.codecs.configuration.CodecRegistry;
8import org.bson.codecs.pojo.PojoCodecProvider;
9import org.springframework.beans.factory.annotation.Value;
10import org.springframework.context.annotation.Bean;
11import org.springframework.context.annotation.Configuration;
12
13import static org.bson.codecs.configuration.CodecRegistries.fromProviders;
14import static org.bson.codecs.configuration.CodecRegistries.fromRegistries;
15
16@Configuration
17public class MongoDBConfiguration {
18
19 @Value("${spring.data.mongodb.uri}")
20 private String connectionString;
21
22 @Bean
23 public MongoClient mongoClient() {
24 CodecRegistry pojoCodecRegistry = fromProviders(PojoCodecProvider.builder().automatic(true).build());
25 CodecRegistry codecRegistry = fromRegistries(MongoClientSettings.getDefaultCodecRegistry(), pojoCodecRegistry);
26 return MongoClients.create(MongoClientSettings.builder()
27 .applyConnectionString(new ConnectionString(connectionString))
28 .codecRegistry(codecRegistry)
29 .build());
30 }
31
32}
Nesse caso, toda a ação do SOCKS5 está ocorrendo, na verdade, no arquivoapplication.propertiesdo seu projeto Spring Boot.
1spring.data.mongodb.uri=${MONGODB_URI:"mongodb+srv://myDatabaseUser:myPassword@example.org/?proxyHost=<proxyHost>&proxyPort=<proxyPort>&proxyUsername=<proxyUsername>&proxyPassword=<proxyPassword>"}

Usando MongoClientSettings

Se você preferir usar o MongoClientSettings, poderá simplesmente passar um URI clássico do MongoDB e lidar com os diferentes parâmetros SOCKS5 diretamente no SocketSettings.Builder.
1package com.mongodb.starter;
2
3import com.mongodb.Block;
4import com.mongodb.ConnectionString;
5import com.mongodb.MongoClientSettings;
6import com.mongodb.client.MongoClient;
7import com.mongodb.client.MongoClients;
8import com.mongodb.connection.SocketSettings;
9import org.bson.codecs.configuration.CodecRegistry;
10import org.bson.codecs.pojo.PojoCodecProvider;
11import org.springframework.beans.factory.annotation.Value;
12import org.springframework.context.annotation.Bean;
13import org.springframework.context.annotation.Configuration;
14
15import static org.bson.codecs.configuration.CodecRegistries.fromProviders;
16import static org.bson.codecs.configuration.CodecRegistries.fromRegistries;
17
18@Configuration
19public class MongoDBConfigurationSocks5 {
20
21 @Value("${spring.data.mongodb.uri}")
22 private String connectionString;
23
24 @Bean
25 public MongoClient mongoClient() {
26 CodecRegistry pojoCodecRegistry = fromProviders(PojoCodecProvider.builder().automatic(true).build());
27 CodecRegistry codecRegistry = fromRegistries(MongoClientSettings.getDefaultCodecRegistry(), pojoCodecRegistry);
28 Block<SocketSettings.Builder> socketSettings = builder -> builder.applyToProxySettings(
29 proxyBuilder -> proxyBuilder.host("<proxyHost>")
30 .port(1080)
31 .username("<proxyUsername>")
32 .password("<proxyPassword>"));
33 return MongoClients.create(MongoClientSettings.builder()
34 .applyConnectionString(new ConnectionString(connectionString))
35 .applyToSocketSettings(socketSettings)
36 .codecRegistry(codecRegistry)
37 .build());
38 }
39
40}

Conclusão

O uso de um proxy SOCKS5 para se conectar ao MongoDB em Java oferece maior segurança e flexibilidade. Seja por meio de parâmetros de cadeia de conexão ou MongoClientSettings, a integração da funcionalidade SOCKS5 é simples.
Se quiser ler mais detalhes, consulte a documentação do SOCKS5 on-line.
Em caso de dúvidas, acesse nosso website da comunidade de desenvolvedores, no qual os engenheiros do MongoDB e a MongoDB Community ajudarão você a colocar em prática sua próxima grande ideia com o MongoDB.
Principais comentários nos fóruns
Ainda não há comentários sobre este artigo.

Facebook Icontwitter iconlinkedin icon
Avaliar este tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Construindo aplicativos invencíveis com Temporal e MongoDB


Jan 27, 2025 | 26 min read
Tutorial

Usando a autenticação AWS IAM com o conector MongoDB para Apache Kafka


Jul 01, 2024 | 4 min read
Tutorial

Projetos de coleção única no MongoDB com dados Spring (Parte 2)


Aug 12, 2024 | 10 min read
Tutorial

Uso do Azure Kubernetes Services para microsserviços Java com Spring Boot


Apr 15, 2024 | 9 min read