【问题标题】:Will javax.servlet.Filter intercept Websocket messages? (Java Servlet API)javax.servlet.Filter 会拦截 Websocket 消息吗? (Java Servlet API)
【发布时间】:2014-07-23 14:59:04
【问题描述】:

当我有一个 websocket 连接时,在“/ws”处说

“/ws”路径上的常规 javax.servlet.Filter 是否会将每条消息作为常规 http 请求拦截?它会只拦截第一个请求(作为握手的一部分吗?)

如果不是,那么如何为 websocket 消息制作这样的过滤器?

我在规范中没有找到任何细节。

【问题讨论】:

    标签: java jakarta-ee servlets websocket


    【解决方案1】:

    不,Servlet 过滤器不会捕获 WebSocket 消息。

    Servlet 根本不支持 WebSocket 协议。你唯一能做的就是注册HttpUpgradeHandler(见HttpServletRequest#upgrade),然后在上面实现WebSocket协议。

    或者.. 如果您想节省一些时间,请查看 JSR 356 和实现,他们正在使用此 API。我个人在 Tyrus 工作,它是 JSR 356 的参考实现。(它是 Java EE 7 的一部分,但您只需要 Servlet 3.1 API)。

    【讨论】:

    • 是否有机会在 EE6 (Websphere 8.0) 上使用 Tyrus 实现?
    • 在 WebSocket 握手之前是否会运行 Servlet 过滤器?
    【解决方案2】:

    它会只拦截第一个请求(作为握手的一部分吗?)

    是的,只有第一个请求,即发起 WebSocket 握手的请求,会被 Servlet 过滤器拦截。

    【讨论】:

      猜你喜欢
      • 2022-01-09
      • 2020-03-18
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      • 2015-12-05
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      相关资源
      最近更新 更多