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 .

Junte-se a nós no Amazon Web Services re:Invent 2024! Saiba como usar o MongoDB para casos de uso de AI .
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Idiomaschevron-right
Javachevron-right

Como se conectar ao MongoDB com um proxy SOCKS5 com Java

Maxime Beugnet2 min read • Published Aug 29, 2024 • Updated Aug 29, 2024
SpringMongoDBJava
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse 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: IPv4, IPv6 ou nome de host do proxy
  • proxyPort: número da porta TCP (padrão 1080)
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 funcionará.
  • 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 string de conexão 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, poderá se conectar dessa forma se estiver passando os parâmetros SOCKS5 na string de conexão.
Na maioria das vezes, se você estiver usando o Spring Boot ou o Spring Data, precisará do registro de codecs para suportar 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, basta 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, você pode conferir a documentação doSOCKS5 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.
Iniciar a conversa

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Artigo

Orquestração do MongoDB com o Spring e Atlas Kubernetes Operator


Jun 12, 2024 | 13 min read
Tutorial

Como utilizar funções do Azure com MongoDB Atlas em Java


Apr 14, 2023 | 8 min read
Tutorial

Introdução ao Azure Spring Apps e ao MongoDB Atlas: um guia passo a passo


Jan 27, 2024 | 5 min read
Tutorial

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


Aug 12, 2024 | 10 min read
Sumário
  • Introdução