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