【问题标题】:Is it possible to get Websocket connection Origin from a javax.websocket.Session instance?是否可以从 javax.websocket.Session 实例获取 Websocket 连接来源?
【发布时间】:2015-08-27 21:40:15
【问题描述】:

我在我的 WebSocket 服务器中使用 jetty 的 jsr356 WebSocket API 实现,出于某种原因,我希望能够通过当前的 javax.websocket.Session 对象获取连接 Origin 值。

我知道我可以在服务器端点Configurator 内部建立连接时获取源,但是我可以在消息到达后从会话对象中获取它吗?

谢谢!

【问题讨论】:

  • 连接来源是什么?
  • 对不起,我可能没说清楚,origin表示http头的“origin”值,通常是websocket客户端主机名,类似http://example.com的字符串

标签: java websocket jetty


【解决方案1】:

Origin 标头在 WebSocket 升级握手期间发送,您可以选择使用自定义 Configurator 接受/拒绝 websocket 升级,和/或捕获 Origin 并将其存储在用户属性中升级供session.getUserProperties()以后使用

javax.websocket.server.ServerEndpointConfig.Configurator

您可以在升级时使用Configurator.checkOrigin(String) 来验证源头,它用于允许/拒绝升级。

您还可以使用Configurator.modifyHandshake(ServerEndpointConfig, HandshakeRequest, HandshakeResponse) 捕获Origin 头部并将其放入 UserProperties 映射中以供以后访问。

例如:

@Override
public void modifyHandshake(ServerEndpointConfig sec, 
                            HandshakeRequest request, 
                            HandshakeResponse response)
{
    sec.getUserProperties().put("TheUpgradeOrigin",request.getHeaders().get("Origin"));
    // Note: this store a List<String> in the key "TheUpgradeOrigin"
}

然后在您的端点中...

@OnMessage
public String onTextMessage(Session session, String msg)
{
    List<String> originHeader = (List<String>)session.getUserProperties()
                                                     .get("TheUpgradeOrigin");

    // Do something with this header

    return msg;
}

【讨论】:

    【解决方案2】:

    Origin 标头只是客户端发送的一段输入,因此无法信任。在表现良好的浏览器中(当然,禁用了开发者扩展!)该值用于告诉主机名下载客户端脚本。也就是说,您可以在 Session 对象上查询升级请求的标头:

    String origin = session.getUpgradeRequest().getHeader("Origin");
    

    【讨论】:

    • session.getUpgradeRequest() 对javax.websocket (JSR356) 无效。
    • 谢谢,我贴错了参考。它是 org.eclipse.jetty.websocket.api.Session
    • 提问者提到了jsr356的使用。码头本地 websocket api 不会帮助他。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    • 2015-05-05
    • 2022-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多