Я пытаюсь получить удаленный IP-адрес браузера, который подключается к веб-серверу RSocket + SpringBoot. Подключение - RSocket через WebSocket.
Веб-сервер: Java -8, SpringBoot-2, использующий RSocket поверх WebSocket и отправляющий RequestStreams в браузер. Я использую автоконфигурацию SpringBoot для настройки RSocket, так что действительно минимальный код на стороне сервера - см. Ниже.
@Headers and MessageHeader
в приведенном ниже коде было просто для того, чтобы посмотреть, есть ли у них что-нибудь, что может привести к удаленному IP, без какой-либо другой причины, по которой они там.
Я поискал в Интернете для ответа - много для http, несколько для веб-сокетов, ноль для RSocket. Это - https://github.com/rsocket/rsocket-java/issues/735 - выглядело многообещающе, но не удалось получить дескриптор DuplexConnection, поэтому сигары там нет.
Есть идеи? Спасибо!
application.yml:
spring.rsocket.server:
mapping-path: /rsocket-test
transport: websocket
server.port: 8080
TestController. java
/**
* TODO: get the remote IP address and log.
* Options:
* 1. @see <a href="https://github.com/rsocket/rsocket-java/issues/735">Ability to intercept requests and access channel information such as remote address</a>.
* 2. Inject IP in header by nginx. See if it shows up in the @Headers param here.
* 3. Browser gets its public IP and adds it to the request object. Doable, but lame
* 4. (Unlikely) Find a way to access thru this chain of private members: headers.req.rsocket().source.connection.source.connection.connection.channel.remoteAddress
*/
@MessageMapping("subscribe-topic")
public Flux<StreamingEvent> subscribeToEventStream(
@Headers Map<String,Object> hdrs,
MessageHeaders mh,
testRequest request) {
return testService.subscribeTopic(request.getRequestId(), request.getTopic());
}