DisposableGuard

Spring Boot (Java)

import org.springframework.http.*;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.client.RestTemplate;
import jakarta.servlet.http.*;
import java.util.Map;

@Component
public class DisposableEmailInterceptor implements HandlerInterceptor {

    private final RestTemplate rest = new RestTemplate();
    private final String apiKey = System.getenv("DG_KEY");

    @Override
    public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object handler) {
        String email = req.getParameter("email");
        if (email == null) return true;

        try {
            String url = "https://api.disposableguard.com/v1/check?email=" +
                java.net.URLEncoder.encode(email, java.nio.charset.StandardCharsets.UTF_8);

            HttpHeaders headers = new HttpHeaders();
            headers.set("Authorization", "Bearer " + apiKey);

            ResponseEntity<Map> response = rest.exchange(
                url, HttpMethod.GET, new HttpEntity<>(headers), Map.class);

            if (response.getStatusCode().is2xxSuccessful()) {
                Boolean disposable = (Boolean) response.getBody().get("is_disposable");
                if (Boolean.TRUE.equals(disposable)) {
                    res.setStatus(400);
                    res.setContentType("application/json");
                    res.getWriter().write("{\"error\":\"Please use a real email address.\"}");
                    return false;
                }
            }
        } catch (Exception e) {
            // fail-open
        }
        return true;
    }
}

Notes

Register the interceptor in a `WebMvcConfigurer` and apply it to your signup endpoint.