当我有一个websocket连接时,说在"/ws"
"/ws"路径上的常规javax.servlet.Filter会拦截每个消息作为常规http请求吗?它是否只拦截第一个请求(作为握手的一部分?)
如果没有,那么,我如何为websocket消息做这样一个过滤器?
我在说明书中没有找到任何关于这个的细节。
不,Servlet过滤器不会捕获WebSocket消息。
Servlet根本不支持WebSocket协议。你唯一能做的就是注册HttpUpgradeHandler(参见HttpServletRequest#upgrade),然后在上面实现WebSocket协议。
或. .如果您想节省一些时间,请查看一下JSR 356及其实现,它们是在这个API之上工作的。我个人负责Tyrus,它是JSR 356的参考实现。(它是Java EE 7的一部分,但您只需要Servlet 3.1 API)。
它是否只拦截第一个请求(作为握手的一部分?)
是的,只有第一个请求,即发起WebSocket握手的请求,被Servlet过滤器截获。