All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.springframework.network.LiteNetworkResolver Maven / Gradle / Ivy

package org.springframework.network;

import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * @see org.apache.http.conn.util.InetAddressUtils
 */
public class LiteNetworkResolver implements NetworkResolver {
  private final Log logger = LogFactory.getLog(getClass());

  private Pattern internal = Pattern.compile("10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}|" + // 10/8
      "192\\.168\\.\\d{1,3}\\.\\d{1,3}|" + // 192.168/16
      "169\\.254\\.\\d{1,3}\\.\\d{1,3}|" + // 169.254/16
      "127\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}|" + // 127/8
      "172\\.1[6-9]{1}\\.\\d{1,3}\\.\\d{1,3}|" + "172\\.2[0-9]{1}\\.\\d{1,3}\\.\\d{1,3}|" + "172\\.3[0-1]{1}\\.\\d{1,3}\\.\\d{1,3}|" + // 172.16/12
      "0:0:0:0:0:0:0:1|" + "::1|" + //
      "[fF][cCdD]" // fc00::/7
  );

  @Override
  public Network resolveNetwork(HttpServletRequest request) {
    String remoteAddr = request.getRemoteAddr();
    if (internal != null) {
      NetworkType networkType = internal.matcher(remoteAddr).matches() ? NetworkType.INTERNAL : NetworkType.EXTERNAL;
      InetAddress inetAddress = getInetAddress(remoteAddr);
      boolean inet4Address = inetAddress instanceof Inet4Address;
      boolean inet6Address = inetAddress instanceof Inet6Address;
      if ((inet4Address || inet6Address) && !(inet4Address && inet6Address)) {
        if (inet4Address) {
          return resolveWithPlatform(networkType, NetworkPlatform.V4);
        }
        if (inet6Address) {
          return resolveWithPlatform(networkType, NetworkPlatform.V6);
        }
      }
    }
    return resolveFallback(request);
  }

  private InetAddress getInetAddress(String remoteAddr) {
    try {
      return InetAddress.getByName(remoteAddr);
    }
    catch (UnknownHostException e) {
      if (logger.isWarnEnabled()) {
        logger.warn(e, e);
      }
    }
    return InetAddress.getLoopbackAddress();
  }

  protected Network resolveWithPlatform(NetworkType networkType, NetworkPlatform networkPlatform) {
    return LiteNetwork.from(networkType, networkPlatform);
  }

  protected Network resolveFallback(HttpServletRequest request) {
    return LiteNetwork.NORMAL_INSTANCE;
  }

  @Override
  public String getInternal() {
    if (internal == null) {
      return null;
    }
    return internal.toString();
  }

  public void setInternal(String internal) {
    if (internal == null || internal.length() == 0) {
      this.internal = null;
    }
    else {
      this.internal = Pattern.compile(internal);
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy