}
public String getHeader(String aHeaderName) {
- if (aHeaderName.equals("ip"))
- return request.getRequest().getRemoteAddr();
+ if (aHeaderName.equals("ip")) {
+ // transparent proxies propagate the originating ip in the x-forwarded-for
+ // header. So if it's there, we should use it.
+ Enumeration headers = request.getRequest().getHeaders("x-forwarded-for");
+ if (headers.hasMoreElements()) {
+ return (String) headers.nextElement();
+ }
+ else {
+ return request.getRequest().getRemoteAddr();
+ }
+ }
if (aHeaderName.equals("hostname")) {
if (cachedHostName==null) {
try {
- cachedHostName = InetAddress.getByName(request.getRequest().getRemoteAddr()).getHostName();
+ cachedHostName = InetAddress.getByName(getHeader("ip")).getHostName();
}
catch (UnknownHostException e) {
cachedHostName = request.getRequest().getRemoteAddr();