Skip to content

Instantly share code, notes, and snippets.

@loinguyenduc101
Created December 9, 2015 16:21
Show Gist options
  • Save loinguyenduc101/f926ae458d79168a71e4 to your computer and use it in GitHub Desktop.
Save loinguyenduc101/f926ae458d79168a71e4 to your computer and use it in GitHub Desktop.
Real client ip - jersey request filter
package com.monitoringvn.utils.rest.filter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.container.PreMatching;
import javax.ws.rs.core.Context;
import java.io.IOException;
/**
* Created by loind on 12/9/2015.
*/
@PreMatching
public class ClientIpFilter implements ContainerRequestFilter {
private static final Logger LOGGER = LoggerFactory.getLogger(ClientIpFilter.class);
@Context
HttpServletRequest httpServletRequest;
@Override
public void filter(ContainerRequestContext request) throws IOException {
String client_ip = httpServletRequest.getHeader("x-real-ip");
if(client_ip == null || client_ip.isEmpty()){ // extract from forward ips
String ipForwarded = httpServletRequest.getHeader("x-forwarded-for");
String[] ips = ipForwarded == null ? null: ipForwarded.split(",") ;
client_ip = ( ips == null || ips.length == 0 )? null : ips[0];
// extract from remote addr
client_ip = ( client_ip == null || client_ip.isEmpty() ) ? httpServletRequest.getRemoteAddr() : client_ip;
}
LOGGER.trace("Real Ip[{}]",client_ip);
request.getHeaders().putSingle("client_ip",client_ip);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment