Skip to Content

Spring Boot (Java)

بالنسبة لتطبيقات Java المؤسسية، فإن الطريقة الأكثر متانة لدمج ProxyTracer هي إنشاء HandlerInterceptor عام. يضمن ذلك التحقق من كل طلب HTTP وارد قبل وصوله إلى المتحكمات لديك.

المعترض

يستخرج هذا التطبيق بأمان عنوان IP من موازن الحمل (معالجة X-Forwarded-For)، ويستدعي ProxyTracer باستخدام HttpClient الأصلي في Java، ويحظر الطلب إذا تم تمييزه.
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)) // مهلة صارمة لمنع حدوث اختناقات .build(); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 1. استخراج عنوان IP الحقيقي بأمان خلف موازنات الحمل/NGINX String ipAddress = request.getHeader("X-Forwarded-For"); if (ipAddress == null || ipAddress.isEmpty()) { ipAddress = request.getRemoteAddr(); } else { ipAddress = ipAddress.split(",")[0].trim(); } // 2. الاستعلام من 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. مطابقة نصية بسيطة (تتجنب مكتبات تحليل JSON الثقيلة لتحقيق أقصى سرعة) 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; // إسقاط الطلب } } } catch (Exception e) { // Fail open: تسجيل الخطأ والسماح بتمرير الطلب System.err.println("ProxyTracer validation failed: " + e.getMessage()); } // 4. حركة المرور نظيفة، المتابعة إلى المتحكم return true; } }

التكوين:

لا تنسَ تسجيل هذا المعترض في فئة WebMvcConfigurer الخاصة بك لتطبيقه عالمياً على مسارات تطبيقك.

آخر تحديث في