Как получить удаленный IP-адрес для подключения Rsocket в SpringBoot - PullRequest
1 голос
/ 05 мая 2020

Я пытаюсь получить удаленный 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());
    }
...