Получить параметр из команды curl в веб-сервисе REST - PullRequest
1 голос
/ 04 мая 2011

Я хочу получить имя пользователя и пароль из команды curl в веб-сервисе REST, используя простой Java-класс. Мой класс Java

@ GET проверка публичного ответа (строковое имя пользователя, строковый пароль) { подлинность ..... }

Я использую Netbean IDE с фреймворком из джерси. Я создал веб-сервис в POJO Java-классе. Кто-нибудь знает, как получить имя пользователя и пароль в Java-классе веб-службы? Моя команда curl выглядит так:

curl -u имя пользователя: пароль http://localhost:8080/project/resources

1 Ответ

2 голосов
/ 04 мая 2011

Если это основано на коде из вашего вопроса здесь , то для получения имени пользователя необходимо добавить новое свойство к ресурсу, помеченному @Context типа javax.ws.rs.core.SecurityContext (назовем это securityContext).Затем вы можете получить доступ к имени пользователя следующим образом:

String username = securityContext.getUserPrincipal().getName();

Однако этот API-интерфейс недоступен.Этот подход будет работать только в том случае, если контейнер уже прошел проверку подлинности пользователя.Чтобы получить пароль, свойство должно иметь тип javax.ws.rs.core.HttpHeaders (назовем его httpHeaders).Используя этот объект, вам придется вызывать

String authHeader = httpHeaders.getRequestHeader("Authorization").get(0);

. При использовании перечисленной вами команды curl по умолчанию будет использоваться Базовая аутентификация HTTP , что дает вам имя пользователя и пароль в кодированной строке base64.состоящий из имени пользователя: пароль.Чтобы получить эти значения, вам необходимо выполнить синтаксический анализ, декодирование base64 и повторный анализ.Предоставленная вами команда curl добавит в запрос следующий заголовок:

Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=

В приведенном выше фрагменте кода authHeader будет иметь значение

Basic dXNlcm5hbWU6cGFzc3dvc.mQ=

Получение имени пользователяи пароль будет выглядеть так:

String[] pair = base64decode(authHeader.split(" ")[1]).split(":");

. В этом коде замените base64decode выбранной вами библиотекой декодирования base64.После этого вызова имя пользователя будет в pair[0], а пароль будет в pair[1].Обратите внимание, что во всем этом коде отсутствуют проверки нуля и границ, а также обработка исключений, которая потребуется для производственного кода.Он также поддерживает только базовую аутентификацию.Если вам нужно было поддерживать другие методы аутентификации, вам нужно было бы обрабатывать любые методы декодирования и синтаксического анализа, которые требуются этому методу.

Мне кажется, что JAX-RS больше ориентирован на использование подхода SecurityContext и опору на контейнерчтобы подтвердить подлинность запроса, поэтому разберитесь со всеми предостережениями, используя подход HttpHeaders.

...