【发布时间】:2014-02-27 16:25:56
【问题描述】:
如前所述,例如在HTML5Rocks WebSockets tutorial,
服务器决定是向所有客户端提供其服务,还是仅对位于一组明确定义的域上的客户端提供服务。
好的,如何使用Java API for WebSocket 1.0 (JSR 356)(在Tomcat 上运行)来做到这一点?
【问题讨论】:
如前所述,例如在HTML5Rocks WebSockets tutorial,
服务器决定是向所有客户端提供其服务,还是仅对位于一组明确定义的域上的客户端提供服务。
好的,如何使用Java API for WebSocket 1.0 (JSR 356)(在Tomcat 上运行)来做到这一点?
【问题讨论】:
见ServerEndpointConfig.Configurator#checkOrigin
一旦注册,checkOrigin 方法将被调用,并使用“Origin”http 标头值作为参数,然后您可以返回 true(如果其正常)或 false,这将导致 HTTP 403 - Origin not verifyed。
(请忽略 javadoc 中对 Tyrus 项目的任何引用,API (javax.websocket.*) 对于所有实现都是相同的)。
【讨论】:
ServerEndpoint.configurator() 被记录为“如果没有提供配置器类,则实现使用它自己的”。所以例如Tomcat 使用org.apache.tomcat.websocket.server.DefaultServerEndpointConfigurator。如果我不想丢失 Configurator 其他方法的默认逻辑,我将不得不继承 Tomcat 的 DefaultServerEndpointConfigurator - 但是我将无法再将它部署到其他容器上......但是好吧,看起来成为目前唯一的可能。再次感谢。
super() 使用它的方法,我需要写extends org.apache.tomcat.websocket.server.DefaultServerEndpointConfigurator - 因此它是 依赖于容器的。
public class MyServerConfigurator extends javax.websocket.server.ServerEndpointConfig.Configurator { ... }