Теоретически, следующего должно быть достаточно.
if (request.getRemoteAddr().equals(request.getLocalAddr())) {
// Locally accessed.
} else {
// Remotely accessed.
}
Обновление согласно комментариям, request.getLocalAddr()
, кажется, возвращает 0.0.0.0
, что действительно может произойти, когда сервер находится за прокси-сервером.
Вместо этого вы можете захотеть сравнить его с адресами, указанными в InetAddress
.
private Set<String> localAddresses = new HashSet<String>();
@Override
public void init(FilterConfig config) throws ServletException {
try {
localAddresses.add(InetAddress.getLocalHost().getHostAddress());
for (InetAddress inetAddress : InetAddress.getAllByName("localhost")) {
localAddresses.add(inetAddress.getHostAddress());
}
} catch (IOException e) {
throw new ServletException("Unable to lookup local addresses");
}
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
if (localAddresses.contains(request.getRemoteAddr())) {
// Locally accessed.
} else {
// Remotely accessed.
}
}
В моем случае localAddresses
содержит следующее:
[192.168.1.101, 0:0:0:0:0:0:0:1, 127.0.0.1]