Перехватить рукопожатие websocket в rsockets - PullRequest
0 голосов
/ 03 мая 2020

Я хочу иметь возможность перехватить первый запрос, сделанный клиентом к моей конечной точке, чтобы иметь возможность ответить с помощью 101 (веб-сокет установлен) или отклонить его.

Есть ли какой-нибудь перехватчик, который я могу использовать? Я попытался зарегистрировать бин-фильтр, но, похоже, он просто пропущен, я думаю, потому что я нахожусь в приложении webflux ...

 @Bean
public FilterRegistrationBean<ContextFilter> initialFilter() {
    FilterRegistrationBean<ContextFilter> registrationBean
            = new FilterRegistrationBean<>();

    registrationBean.setFilter(new MyFilter());
    registrationBean.addUrlPatterns("/*");
    registrationBean.setOrder(1);
    return registrationBean;
}

и

public class MyFilter extends OncePerRequestFilter{

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
        throws ServletException, IOException {

    log.info("You know, for filtering");
    filterChain.doFilter(request, response);

}

1 Ответ

0 голосов
/ 04 мая 2020

Чтобы установить sh, клиент соединения RSocket должен отправить первый кадр, называемый кадром SETUP. Вы можете поймать его с помощью аннотации Spring @ConnectMapping.

    @ConnectMapping
    fun onConnect(rSocketRequester: RSocketRequester, clientId: String) {
        if (clientId == "wrong_client") rSocketRequester.rsocket().dispose()   //to reject connection
    }

Чтобы отклонить соединение, используйте rSocketRequester.rsocket().dispose(), как показано выше. Обратите внимание, что с помощью кадра SETUP вы можете передавать полезную нагрузку и метаданные от клиента как обычно.

...