переформулирую вопрос, заданный в предыдущем топике (мне нужно пройти авторизацию на прокси-сервере из 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 очень разочаровывает.
можно сделать вот как:
однако этот способ чрезвычайно неудобен в том случае, когда используется автоматически сгенерированный stub - каждый раз при перестройке его надо подвергать рефакторингу.
еще один способ приходит в голову - поднимать локальный прокси(*), который будет ловить все сообщения SOAP и переправлять их рабочему серверу, проходя авторизацию на проксе локальной сети.
UPD: имел в виду, что можно запускать в той же vm простенький http-сервер типа Jetty, который будет переправлять все запросы к localhost на somehost. мне этот способ кажется очень неприятным.
идеи? :)
исследование интернета показывает, что некоторые прокси жрут авторизацию в с помощью установки свойств jvm (System.getProperties()): proxyHost, proxyPort, proxyUser, proxyPassword. это было бы просто супер, но практика показала, что proxyHost и proxyPort действительно используются всегда, а user/password игнорируются.
- некоторые товарищи утверждают, что авторизация должна проходить с помощью Authentificator (мне не удалось его "оживить" - метод для авторизации даже не вызывается).
- кроме того, доподлинно известно, что авторизация на веб-прокси происходит с помощью заголовка Proxy-Authorization.
- но некоторым вроде как удается проходить ее с помощью установки заголовков proxyUsername и proxyPassword
что наводит меня на ту чрезвычайно ценную мысль, что на разных прокси-серверах авторизация проходит по-разному %)
ближе к делу
заставить Axis выдавать заголовок вида
Proxy-Authorization: {NTLM | BASIC} TlRMTVNTUAADAAAAAIIADUUAAAYABgAng.......
цивилизованным образом не удается
честно говоря, сложность работы с уровнем транспорта в 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. мне этот способ кажется очень неприятным.
идеи? :)
