微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

由跨实例共享的 ServletAwareConfigurator 引起的 Java Websocket 服务器标头授权问题

如何解决由跨实例共享的 ServletAwareConfigurator 引起的 Java Websocket 服务器标头授权问题

此问题演变为从 Java EE Websocket 连接检索授权标头。我有一个半工作版本,它使用 ServletAwareConfigurator.modifyHandshake 类在连接升级到 websocket 之前获取标头。这是一个例子

public class ServletAwareConfigurator extends Configurator {
    @Override
    public void modifyHandshake(ServerEndpointConfig config,HandshakeRequest request,HandshakeResponse response) {
        config.getUserProperties().put("authorization",(String)request.getHeaders().get("authorization").get(0)); 
    }
}

然后,为了从该配置类中检索标头,我在 Onopen Websocket 端点中使用了类似的内容

@ServerEndpoint(value ="/engage_wss",configurator = ServletAwareConfigurator.class)
public class Websocket {


    @Onopen
    public void onopen(Session session,EndpointConfig config) throws InterruptedException,IOException,sqlException,IllegalObjectTypeException,ObjectDoesNotExistException,ErrorCompletingRequestException,AS400SecurityException {

      
    
            String authorization = config.getUserProperties().get("authorization").toString();
      //do stuff with this authorization

    }

}

如果我有一个 websocket 连接尝试一次建立连接,这很好用。 问题是当两个 websockets 尝试同时连接时。授权标头之一将被复制。这是因为 ServletAwareConfigurator.class 不是唯一的,而是跨实例共享的。有没有办法解决这个问题?像强制 servlet Config 类是唯一的?

谢谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。