Skip to Content

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érant X-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)) // Strict timeout to prevent bottlenecking .build(); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 1. Safely extract the real IP behind load balancers/NGINX String ipAddress = request.getHeader("X-Forwarded-For"); if (ipAddress == null || ipAddress.isEmpty()) { ipAddress = request.getRemoteAddr(); } else { ipAddress = ipAddress.split(",")[0].trim(); } // 2. Query ProxyTracer API 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. Simple string matching (Avoids heavy JSON parsing libraries for raw speed) 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; // Drops the request } } } catch (Exception e) { // Fail open: log the error and allow the request through System.err.println("ProxyTracer validation failed: " + e.getMessage()); } // 4. Traffic is clean, proceed to the controller return true; } }

Configuration:

N'oubliez pas d'enregistrer cet intercepteur dans votre classe WebMvcConfigurer pour l'appliquer globalement aux routes de votre application.

Last updated on