【问题标题】:Java WebSocket API: Restrict service to certain domainsJava WebSocket API:将服务限制在某些域
【发布时间】:2014-02-27 16:25:56
【问题描述】:

如前所述,例如在HTML5Rocks WebSockets tutorial

服务器决定是向所有客户端提供其服务,还是仅对位于一组明确定义的域上的客户端提供服务。

好的,如何使用Java API for WebSocket 1.0 (JSR 356)(在Tomcat 上运行)来做到这一点?

【问题讨论】:

    标签: java websocket jsr356


    【解决方案1】:

    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,它会起作用;默认配置器将由 API 类本身找到,因此您仍然可以保持独立于容器。
    • 我的意思是..它是一个类,你不需要重写你不想修改的方法。默认实现寻找容器默认实现,你不需要做任何事情。
    • 在声明我的类时,如果我想通过super() 使用它的方法,我需要写extends org.apache.tomcat.websocket.server.DefaultServerEndpointConfigurator - 因此它 依赖于容器的。
    • 你可以写public class MyServerConfigurator extends javax.websocket.server.ServerEndpointConfig.Configurator { ... }
    猜你喜欢
    • 2013-12-05
    • 2014-09-08
    • 2021-10-08
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 2017-01-31
    相关资源
    最近更新 更多