import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; /** * Servlet Filter implementation class TestFilter */ public class TestFilter implements Filter { class CustomRequest extends HttpServletRequestWrapper { HttpServletRequest request; public CustomRequest(HttpServletRequest request) { super(request); this.request = request; } @Override public String getRemoteAddr() { String header = request.getHeader("x-forwarded-for"); if ( header != null) { return header; } else { return request.getRemoteAddr(); } } @Override public String getRemoteHost() { return getRemoteAddr(); } } /** * Default constructor. */ public TestFilter() { // TODO Auto-generated constructor stub } /** * @see Filter#destroy() */ public void destroy() { // TODO Auto-generated method stub } /** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; chain.doFilter(new CustomRequest(req), response); } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { // TODO Auto-generated method stub } }