【发布时间】:2014-07-23 14:59:04
【问题描述】:
当我有一个 websocket 连接时,在“/ws”处说
“/ws”路径上的常规 javax.servlet.Filter 是否会将每条消息作为常规 http 请求拦截?它会只拦截第一个请求(作为握手的一部分吗?)
如果不是,那么如何为 websocket 消息制作这样的过滤器?
我在规范中没有找到任何细节。
【问题讨论】:
标签: java jakarta-ee servlets websocket
当我有一个 websocket 连接时,在“/ws”处说
“/ws”路径上的常规 javax.servlet.Filter 是否会将每条消息作为常规 http 请求拦截?它会只拦截第一个请求(作为握手的一部分吗?)
如果不是,那么如何为 websocket 消息制作这样的过滤器?
我在规范中没有找到任何细节。
【问题讨论】:
标签: java jakarta-ee servlets websocket
不,Servlet 过滤器不会捕获 WebSocket 消息。
Servlet 根本不支持 WebSocket 协议。你唯一能做的就是注册HttpUpgradeHandler(见HttpServletRequest#upgrade),然后在上面实现WebSocket协议。
或者.. 如果您想节省一些时间,请查看 JSR 356 和实现,他们正在使用此 API。我个人在 Tyrus 工作,它是 JSR 356 的参考实现。(它是 Java EE 7 的一部分,但您只需要 Servlet 3.1 API)。
【讨论】:
它会只拦截第一个请求(作为握手的一部分吗?)
是的,只有第一个请求,即发起 WebSocket 握手的请求,会被 Servlet 过滤器拦截。
【讨论】: