2015-01-26 3 views
3

Я использую клиентский пакет Tyrus для использования с моего приложения Java конечной точки websocket, которая требует заголовка cookie в первоначальном запросе клиента. Просматривая документы API клиента Tyrus и Google вокруг меня не слишком далеко. Любые идеи, как можно это сделать?Как включить файл cookie в первоначальный запрос клиента WebSocket с использованием клиента Tyrus java?

ответ

2

Нашли решение по моему собственному вопросу, так что я решил поделиться. Решение заключается в настройке настраиваемого конфигуратора на 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(); 

Затем используйте этот ClientEndpointConfig объект на последующий вызов к ClientManager.connectToServer или ClientManager.asyncConnectToServer.

+0

Это не работает с несколько печеньем для меня, потому что куки будут разделены запятыми. Но он должен быть разделен точкой с запятой. – Horcrux7

0

Чтобы справиться ошибка с несколько печеньем в библиотеке Тира мое решение выглядит следующим образом:

 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())); 
      } 
     };