Единственный способ увидеть доступ к IP-адресу - через HttpExchange
. К сожалению, это не то, что нам подвергается. Вы можете либо сделать запрос на функцию для выставления IP-адреса, либо вы можете просто изменить его самостоятельно и создать свой собственный артефакт. В любом случае, я бы предложил внести изменение, добавив в ContainerRequest
свойство, которое вы можете удалить в своем фильтре.
Если вы посмотрите здесь в исходном коде , вы увидите ContainerRequest
. Я бы просто сделал что-то вроде
final ContainerRequest requestContext = new ContainerRequest(baseUri, requestUri,
exchange.getRequestMethod(), getSecurityContext(exchange.getPrincipal(), isSecure),
new MapPropertiesDelegate());
requestContext.setProperty(JdkServerProperties.REMOTE_IP_ADDR, exchange.getRemoteAddr());
Тогда в вашем ContainerRequestFilter
вы можете просто сделать
@Override
public void filter(ContainerRequestContext requestContext) {
// ContainerRequest implements ContainerRequestContext
InetSockAddress remoteAddr = (InetSocketAddress) requestContext.getProperty(JdkServerProperties.REMOTE_IP_ADDR);
}
Да, так что если бы я сделал запрос функции / извлечения или просто создал свой собственный артефакт, это, вероятно, изменение, которое я бы сделал. Или, если вы не хотите показывать InetSocketAddress
, вы можете просто построить строку IP и добавить ее в качестве значения свойства.