Image

Imagenose_army wrote in Imageru_java

переформулирую вопрос, заданный в предыдущем топике (мне нужно пройти авторизацию на прокси-сервере из Axis-клиента)

исследование интернета показывает, что некоторые прокси жрут авторизацию в с помощью установки свойств jvm (System.getProperties()): proxyHost, proxyPort, proxyUser, proxyPassword. это было бы просто супер, но практика показала, что proxyHost и proxyPort действительно используются всегда, а user/password игнорируются.
- некоторые товарищи утверждают, что авторизация должна проходить с помощью Authentificator (мне не удалось его "оживить" - метод для авторизации даже не вызывается).
- кроме того, доподлинно известно, что авторизация на веб-прокси происходит с помощью заголовка Proxy-Authorization.
- но некоторым вроде как удается проходить ее с помощью установки заголовков proxyUsername и proxyPassword
что наводит меня на ту чрезвычайно ценную мысль, что на разных прокси-серверах авторизация проходит по-разному %)

ближе к делу
заставить Axis выдавать заголовок вида
Proxy-Authorization: {NTLM | BASIC} TlRMTVNTUAADAAAAAIIADUUAAAYABgAng................41cJZ6m5jDqc8=
цивилизованным образом не удается
честно говоря, сложность работы с уровнем транспорта в Axis очень разочаровывает.

можно сделать вот как:


Message message = call.getMessageContext().getRequestMessage();

if(message == null) {
   message = new Message(null);
   call.getMessageContext().setRequestMessage(message);
}

MimeHeaders headers = message.getMimeHeaders();

String authString = proxyUsername + ":" + proxyPassword;
authString = (new sun.misc.BASE64Encoder()).encode(authString.getBytes());
headers.addHeader("proxySet", "true");
... и так далее, добавляем заголовки


однако этот способ чрезвычайно неудобен в том случае, когда используется автоматически сгенерированный stub - каждый раз при перестройке его надо подвергать рефакторингу.

еще один способ приходит в голову - поднимать локальный прокси(*), который будет ловить все сообщения SOAP и переправлять их рабочему серверу, проходя авторизацию на проксе локальной сети.

UPD: имел в виду, что можно запускать в той же vm простенький http-сервер типа Jetty, который будет переправлять все запросы к localhost на somehost. мне этот способ кажется очень неприятным.

идеи? :)