【问题标题】:Intercept websocket initial handshake in rsockets在 rsockets 中拦截 websocket 初始握手
【发布时间】:2020-05-03 17:07:55
【问题描述】:

我希望能够拦截客户端向我的端点发出的第一个请求,以便能够以 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);

}

【问题讨论】:

  • 您不应该使用过滤器来解决此问题,因为 websockets 不是 HTTP,因此过滤器无法拦截,而且您选择的过滤器不是 webflux 过滤器。只是想让你知道。 OncePerRequestFilter 未在 webflux 中使用。如果你想在 webflux 中使用 HTTP 过滤器,你必须使用 WebFilter 类。你可以在这里阅读更多关于它的信息baeldung.com/spring-webflux-filters
  • 我知道,但我想根据一些标头值阻止初始 http 请求,即包含切换协议请求的请求。从 websocket 上可以不再拦截任何东西

标签: spring-boot spring-webflux rsocket


【解决方案1】:

要建立 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 帧,您可以像往常一样从客户端传递有效负载和元数据。

【讨论】:

  • 是否也可以查看请求头或查询字符串参数?
  • 不明白怎么用...我需要在某个地方注册吗?
  • 您可以在@Controller文件中使用它。您还可以拥有多个@ConnetctMapping("specify-route-here"),并使用客户端元数据来决定使用哪一个。它应该像一个简单的@MessageMapping,请查看文档docs.spring.io/spring/docs/current/spring-framework-reference/…
  • 无论如何,我似乎看不到 url 参数/标题,甚至没有得到初始的 rsocket
  • 向我展示如何使用 rsocket 从客户端传递数据和元数据的代码
猜你喜欢
  • 1970-01-01
  • 2014-03-14
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
相关资源
最近更新 更多