Skip to Content

Spring Boot (Java)

Für Enterprise-Java-Anwendungen ist die robusteste Möglichkeit zur Integration von ProxyTracer das Erstellen eines globalen HandlerInterceptor. Dies stellt sicher, dass jede eingehende HTTP-Anfrage überprüft wird, bevor sie Ihre Controller erreicht.

Der Interceptor

Diese Implementierung extrahiert die IP sicher von einem Load-Balancer (Behandlung von X-Forwarded-For), fragt ProxyTracer mithilfe von Javas nativem HttpClient ab und blockiert die Anfrage, wenn sie als schädlich markiert wird.
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)) // Striktes Timeout zur Vermeidung von Engpässen .build(); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 1. Echte IP hinter Load-Balancern/NGINX sicher extrahieren String ipAddress = request.getHeader("X-Forwarded-For"); if (ipAddress == null || ipAddress.isEmpty()) { ipAddress = request.getRemoteAddr(); } else { ipAddress = ipAddress.split(",")[0].trim(); } // 2. ProxyTracer-API abfragen 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. Einfaches String-Matching (vermeidet rechenintensive JSON-Parsing-Bibliotheken für maximale Geschwindigkeit) 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; // Verwirft die Anfrage } } } catch (Exception e) { // Fail-Open: Fehler protokollieren und Anfrage durchlassen System.err.println("ProxyTracer validation failed: " + e.getMessage()); } // 4. Traffic ist sauber, weiter zum Controller return true; } }

Konfiguration:

Vergessen Sie nicht, diesen Interceptor in Ihrer WebMvcConfigurer-Klasse zu registrieren, um ihn global auf Ihre Anwendungsrouten anzuwenden.

Zuletzt aktualisiert am