2

我希望能够拦截客户端向我的端点发出的第一个请求,以便能够以 101(已建立 websocket)回答或拒绝它。

有没有我可以使用的拦截器?我尝试注册一个过滤器 bean,但它似乎只是被跳过了,我想是因为我在一个 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);

}
4

1 回答 1

0

要建立 RSocket 连接,客户端必须发送一个称为 SETUP 帧的第一帧。@ConnectMapping您可以使用 Spring注释来捕获它。

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

要拒绝连接,请使用rSocketRequester.rsocket().dispose()如上所示。请注意,使用 SETUP 帧,您可以像往常一样从客户端传递有效负载和元数据。

于 2020-05-04T05:04:47.323 回答