当我有一个websocket连接时,请说“/ ws”
“/ ws”路径上的常规javax.servlet.Filter是否会将每条消息作为常规http请求拦截?它是否只拦截第一个请求(作为握手的一部分?)
如果不是,那么,我如何为websocket消息制作这样的过滤器?
我在规范中没有找到任何具体细节。
答案 0 :(得分:3)
不,Servlet Filter无法捕获WebSocket消息。
Servlet根本不支持WebSocket协议。您唯一能做的就是注册HttpUpgradeHandler(参见HttpServletRequest#upgrade),然后再实施WebSocket协议。
或者..如果你想节省一些时间,看看JSR 356和实现,他们正在使用这个API。我个人致力于Tyrus,它是JSR 356的参考实现。(它是Java EE 7的一部分,但您只需要Servlet 3.1 API)。
答案 1 :(得分:1)
它是否只拦截第一个请求(作为握手的一部分?)
是的,只有第一个请求,即启动WebSocket握手的请求,才被Servlet过滤器截获。