
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.util.regex.Pattern;
import javax.servlet.http.HttpServletRequest;
/**
* @see org.apache.http.conn.util.InetAddressUtils
*/
public class LiteNetworkResolver implements NetworkResolver {
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
);
private long timeout = 500L;
@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 = NetworkUtils.getByName(remoteAddr, timeout);
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);
}
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);
}
}
@Override
public long getTimeout() {
return timeout;
}
public void setTimeout(long timeout) {
this.timeout = timeout;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy