2015-09-11 2 views
0

Я пытаюсь выяснить, возможно ли прокси-аутентификация в Java с помощью причала. Я был в состоянии сделать основные и переваривать схемы аутентификации с использованием причала и есть простые способы в Jetty, чтобы установить эти схемы аутентификации с помощью псевдокода, как это:аутентификация прокси-сервера с использованием jetty

constraint = org.mortbay.jetty.security.Constraint(); 
constraint.setName(constraint.('__BASIC_AUTH')) 
constraint.setRoles({'admin'}); 
constraint.setAuthenticate(true); 
constraintMapping = ConstraintMapping(); 
constraintMapping.setConstraint(constraint); 
constraintMapping.setPathSpec('/*'); 
securityHandler = SecurityHandler(); 
securityHandler.setUserRealm(myrealm); 
securityHandler.setConstraintMappings(constraintMapping); 

Аналогичны для дайджеста __BASIC_AUTH аутентификации может быть заменен __DIGEST_AUTH. Я использую HttpServlets для обработки запросов/ответов. Однако, если я хочу получить аутентификацию на основе прокси, как мне это сделать?

Должен ли я использовать doGet() для httpservlet и пытаться выполнить аутентификацию и явную переадресацию на другой адрес или есть способ использовать сам причал, чтобы настроить прокси-аутентификацию (или прокси-сервер localhost), как показано в псевдо-выше ?

Могу ли я получить код помощи для проверки подлинности на основе прокси-сервера, которая проверяет подлинность и перенаправляет запросы HttpServlet на другой сервлет/сервер?

+0

Использование 'org.mortbay.jetty' означает, что вы используете * древнюю * версию Jetty, давно EOL (End of Life). Проект Jetty перешел в Eclipse Foundation еще в 2009 году и изменил его упаковку на 'org.eclipse.jetty' –

ответ

0

Что касается current version of Jetty (9.3.3.v20150827), заголовок Proxy-Authenticate является не связаны каким-либо образом к WWW-Authenticate заголовка, система Servlet ограничение.

В спецификации Servlet нет ничего, кроме реализации Jetty, для поддержки заголовка клиента Proxy-Authenticate с точки зрения ограничения.

Однако, используя Jetty 9.3.x вы можете использовать в AsyncProxyServlet, AsyncProxyServlet.Transparent, AsyncMiddleManServlet или AsyncMiddleManServlet.Transparent иметь средства, чтобы справиться с этой Proxy-Authenticate головой в собственных условиях.

Для этого вы можете начать с одного из них, а затем переопределить sendProxyRequest(HttpServletRequest clientRequest, HttpServletResponse proxyResponse, Request proxyRequest).

В вашей версии sendProxyRequest(), смотрите на clientRequest заголовки для Proxy-Authenticate и Proxy-Authorize, а также выполнять на основе прокси аутентификации, который наилучшим образом соответствует вашим потребностям.

Если аутентификация проходит, то звоните super.sendProxyRequest(clientRequest, proxyResponse, proxyRequest);.

В противном случае используйте proxyResponse, чтобы отправить ответ на вызов.

+0

Спасибо, что сообщили мне об этом !. Поэтому мне кажется, что мне нужно реализовать метод sendProxyRequest. Однако, в отличие от doGet(), который автоматически вызывается при отправке HTTP-запроса, как этот метод вызывается из клиента и где указан URL-адрес этого прокси-сервера? Кроме того, знаете ли вы, может ли прокси-аутентификация легко выбрать базовый или дайджест в виде схемы таким образом? – avish

+0

Я пошел вперед и подал запрос на улучшение для лучшего метода, который можно переопределить для этого поведения - https://bugs.eclipse.org/477201 –

Смежные вопросы