Como se conectar ao MongoDB com um proxy SOCKS5 com Java
Avalie esse Tutorial
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.
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)
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.
1 public 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 }
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.
1 public 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 }
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.
1 package com.mongodb.starter; 2 3 import com.mongodb.ConnectionString; 4 import com.mongodb.MongoClientSettings; 5 import com.mongodb.client.MongoClient; 6 import com.mongodb.client.MongoClients; 7 import org.bson.codecs.configuration.CodecRegistry; 8 import org.bson.codecs.pojo.PojoCodecProvider; 9 import org.springframework.beans.factory.annotation.Value; 10 import org.springframework.context.annotation.Bean; 11 import org.springframework.context.annotation.Configuration; 12 13 import static org.bson.codecs.configuration.CodecRegistries.fromProviders; 14 import static org.bson.codecs.configuration.CodecRegistries.fromRegistries; 15 16 17 public class MongoDBConfiguration { 18 19 20 private String connectionString; 21 22 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 arquivo
application.properties
do seu projeto Spring Boot.1 spring.data.mongodb.uri=${MONGODB_URI:"mongodb+srv://myDatabaseUser:myPassword@example.org/?proxyHost=<proxyHost>&proxyPort=<proxyPort>&proxyUsername=<proxyUsername>&proxyPassword=<proxyPassword>"}
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
.1 package com.mongodb.starter; 2 3 import com.mongodb.Block; 4 import com.mongodb.ConnectionString; 5 import com.mongodb.MongoClientSettings; 6 import com.mongodb.client.MongoClient; 7 import com.mongodb.client.MongoClients; 8 import com.mongodb.connection.SocketSettings; 9 import org.bson.codecs.configuration.CodecRegistry; 10 import org.bson.codecs.pojo.PojoCodecProvider; 11 import org.springframework.beans.factory.annotation.Value; 12 import org.springframework.context.annotation.Bean; 13 import org.springframework.context.annotation.Configuration; 14 15 import static org.bson.codecs.configuration.CodecRegistries.fromProviders; 16 import static org.bson.codecs.configuration.CodecRegistries.fromRegistries; 17 18 19 public class MongoDBConfigurationSocks5 { 20 21 22 private String connectionString; 23 24 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 }
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.
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.