Skip to Content

Spring Boot (Java)

Kurumsal Java uygulamalarında ProxyTracer'ı entegre etmenin en sağlam yolu global bir HandlerInterceptor oluşturmaktır. Bu, gelen her HTTP isteğinin controller'larınıza ulaşmadan önce doğrulanmasını sağlar.

Interceptor

Bu uygulama, IP'yi bir yük dengeleyiciden güvenli bir şekilde çıkarır (X-Forwarded-For başlığını yönetir), Java'nın yerel HttpClient istemcisini kullanarak ProxyTracer'ı çağırır ve tehdit algılanırsa isteği engeller.
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)) // Darboğazları önlemek için kesin zaman aşımı .build(); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 1. Yük dengeleyicilerin/NGINX'in arkasındaki gerçek IP'yi güvenli bir şekilde çıkarın String ipAddress = request.getHeader("X-Forwarded-For"); if (ipAddress == null || ipAddress.isEmpty()) { ipAddress = request.getRemoteAddr(); } else { ipAddress = ipAddress.split(",")[0].trim(); } // 2. ProxyTracer API'sini sorgulayın 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. Basit dize eşleme (Saf hız için ağır JSON ayrıştırma kütüphanelerinden kaçınır) 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; // İsteği düşürür } } } catch (Exception e) { // Fail open: Hatayı günlüğe kaydedin ve isteğin geçmesine izin verin System.err.println("ProxyTracer validation failed: " + e.getMessage()); } // 4. Trafik temiz, controller'a devam edin return true; } }

Yapılandırma:

Tüm uygulama rotalarınıza global olarak uygulamak için bu interceptor'ı WebMvcConfigurer sınıfınıza kaydetmeyi unutmayın.

Son güncelleme tarihi