Spring Boot (Java)
Pour les applications d'entreprise Java, la manière la plus robuste d'intégrer ProxyTracer est de créer un HandlerInterceptor global. Cela garantit que chaque requête HTTP entrante est vérifiée avant d'atteindre vos contrôleurs.
L'Intercepteur
Cette implémentation extrait en toute sécurité l'IP d'un équilibreur de charge (en gérantX-Forwarded-For), appelle ProxyTracer en utilisant le HttpClient natif de Java, et bloque la requête si elle est signalée.
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
@Component
public class ProxyTracerInterceptor implements HandlerInterceptor {
private static final String API_KEY = System.getenv("PROXYTRACER_API_KEY");
private final HttpClient httpClient = HttpClient.newBuilder()
.connectTimeout(Duration.ofMillis(500)) // Délai d'attente strict pour éviter les goulots d'étranglement
.build();
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 1. Extraire en toute sécurité l'IP réelle derrière les équilibreurs de charge/NGINX
String ipAddress = request.getHeader("X-Forwarded-For");
if (ipAddress == null || ipAddress.isEmpty()) {
ipAddress = request.getRemoteAddr();
} else {
ipAddress = ipAddress.split(",")[0].trim();
}
// 2. Interroger l'API ProxyTracer
HttpRequest ptRequest = HttpRequest.newBuilder()
.uri(URI.create("https://api.proxytracer.com/v1/check/" + ipAddress))
.header("Authorization", "Bearer " + API_KEY)
.GET()
.build();
try {
HttpResponse<String> ptResponse = httpClient.send(ptRequest, HttpResponse.BodyHandlers.ofString());
if (ptResponse.statusCode() == 200) {
// 3. Correspondance de chaînes simple (évite les bibliothèques d'analyse JSON lourdes pour une vitesse brute)
if (ptResponse.body().contains("\"proxy\": true") || ptResponse.body().contains("\"proxy\":true")) {
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
response.getWriter().write("{\"error\": \"Access Denied: VPN or Proxy detected.\"}");
response.setContentType("application/json");
return false; // Rejette la requête
}
}
} catch (Exception e) {
// Fail open : journaliser l'erreur et laisser passer la requête
System.err.println("ProxyTracer validation failed: " + e.getMessage());
}
// 4. Le trafic est sain, poursuivre vers le contrôleur
return true;
}
}Configuration :
N'oubliez pas d'enregistrer cet intercepteur dans votre classe WebMvcConfigurer pour l'appliquer globalement aux routes de votre application.
Dernière mise à jour le