Let’s say you want to track the source of hits coming to your REST services.
And you have developed them using Spring Boot.
Here is the algorithm:
STEP1: Create a Spring Handler Interceptor
STEP2: Retrieve the IP address in the prehandle method of the Handler interceptor.
2.a) Use X-Forwarded-For header extracted from HttpRequest object to find the IP address of the client
2.b) If it is not present , retrieve it from the request object itself
STEP3: Register the interceptor
Here is the Spring Interceptor :
package com.ipaddress.demo;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class IPAddressInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String ipAddress = request.getHeader("X-Forward-For");
if(ipAddress== null){
ipAddress = request.getRemoteAddr();
}
System.out.println(ipAddress);
return false;
}
}
We get the IP address from the X-Forward-For header because it contains the actual ip address of the client in case if it requests through a proxy. The proxy address will not be passed through in this case in this header.
If it is not present we can retrieve it from the request object itself . Instead of printing it out as I have shown above we can log it for tracking in live environment.
Once the interceptor is created we need to register it:
package com.ipaddress.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Component
public class InterceptorRegistry implements WebMvcConfigurer {
@Autowired
private IPAddressInterceptor ipAddressInterceptor;
@Override
public void addInterceptors(org.springframework.web.servlet.config.annotation.InterceptorRegistry registry) {
registry.addInterceptor(ipAddressInterceptor);
}
}
That’s it.
Now when you hit any of the REST services in your app ,the IP address of the source of the hit will be tracked .
Leave a Reply