【问题标题】:How to include a cookie in the initial WebSocket client request using Tyrus java client?如何使用 Tyrus java 客户端在初始 WebSocket 客户端请求中包含 cookie?
【发布时间】:2015-01-26 00:31:00
【问题描述】:

我正在使用 Tyrus 客户端包从我的 Java 应用程序中使用一个 websocket 端点,该端点在初始客户端请求中需要一个 cookie 标头。浏览 Tyrus 客户端 API 文档和 Google 并没有让我走得太远。有什么想法可以做到这一点吗?

【问题讨论】:

    标签: http cookies websocket tyrus


    【解决方案1】:

    找到了解决我自己问题的方法,所以想分享一下。解决方案是在 ClientEndpointConfig 上设置一个自定义配置器,并覆盖该配置器中的 beforeRequest 方法以添加 cookie 标头。

    例如:

    ClientEndpointConfig cec = ClientEndpointConfig.Builder.create()
        .configurator(new ClientEndpointConfig.Configurator() {
            @Override
            public void beforeRequest(Map<String, List<String>> headers) {
                super.beforeRequest(headers);
                List<String> cookieList = headers.get("Cookie");
                if (null == cookieList) {
                    cookieList = new ArrayList<>();
                }
                cookieList.add("foo=\"bar\"");     // set your cookie value here
                headers.put("Cookie", cookieList);
            }
        }).build();
    

    然后在您对ClientManager.connectToServerClientManager.asyncConnectToServer 的后续调用中使用此ClientEndpointConfig 对象。

    【讨论】:

    • 这对我来说不适用于多个 cookie,因为 cookie 将用逗号分隔。但必须用分号隔开。
    【解决方案2】:

    为了处理 tyrus 库中多个 cookie 的错误,我的解决方案如下:

            ClientEndpointConfig.Configurator configurator = new ClientEndpointConfig.Configurator() {
                @Override
                public void beforeRequest( Map<String, List<String>> headers ) {
                    // A bug in the tyrus library let concat multiple headers with a comma. This is wrong for cookies which needs to concat via semicolon
                    List<String> cookies = getMyCookies();
                    StringBuilder builder = new StringBuilder();
                    for( String cookie : cookies ) {
                        if( builder.length() > 0 ) {
                            builder.append( "; " ); // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cookie
                        }
                        builder.append( cookie );
                    }
                    headers.put( "Cookie", Arrays.asList( builder.toString() ) );
                }
            };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-08
      • 2016-08-20
      • 2023-03-09
      • 2018-02-09
      • 1970-01-01
      • 2021-06-23
      • 1970-01-01
      相关资源
      最近更新 更多