Я использую клиентский пакет Tyrus для использования с моего приложения Java конечной точки websocket, которая требует заголовка cookie в первоначальном запросе клиента. Просматривая документы API клиента Tyrus и Google вокруг меня не слишком далеко. Любые идеи, как можно это сделать?Как включить файл cookie в первоначальный запрос клиента WebSocket с использованием клиента Tyrus java?
3
A
ответ
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
Чтобы справиться ошибка с несколько печеньем в библиотеке Тира мое решение выглядит следующим образом:
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()));
}
};
Это не работает с несколько печеньем для меня, потому что куки будут разделены запятыми. Но он должен быть разделен точкой с запятой. – Horcrux7