, , , - .
httpcore-nio 4.1, . , (, , ). 4.2.1 . . 403 Forbidden, localhost.
HttpCore NIO 4.2
@Override
public void handle(final HttpRequest request, final HttpResponse response, final HttpContext context) {
HttpInetConnection connection = (HttpInetConnection) context.getAttribute(ExecutionContext.HTTP_CONNECTION);
InetAddress ia = connection.getRemoteAddress();
if("localhost".equals(ia.getHostName()) {
response.setStatusCode(HttpStatus.SC_FORBIDDEN);
return;
}
...
}
HttpCore NIO 4.1
: . 4.1, 4.2.x. , .
httpcore-nio 4.1, , , , (iosession) (HttpContext).
@Override
public void handle(final HttpRequest request, final HttpResponse response, final HttpContext context) {
try {
Field f = context.getClass().getDeclaredField("iosession");
boolean accessible = f.isAccessible();
Field modifiersField = Field.class.getDeclaredField("modifiers");
int modifiers = f.getModifiers();
modifiersField.setAccessible(true);
modifiersField.set(f, f.getModifiers() & ~Modifier.FINAL & ~Modifier.PRIVATE);
f.setAccessible(true);
IOSession io = (IOSession) f.get(context);
f.setAccessible(accessible);
modifiersField.set(f, modifiers);
SocketAddress sa = io.getRemoteAddress();
if("localhost".equals(((InetSocketAddress) sa).getHostName())) {
response.setStatusCode(HttpStatus.SC_FORBIDDEN);
return;
}
} catch (Exception e) {
logger.error("No way! I can't believe this fantastic piece of code threw an exception!", e);
}
...
}