Ответ 1
Клиентская сторона
Чтобы отправить учетные данные в API, вы используете заголовок HTTP Authorization
, указав учетные данные в форме Basic username:password
. Имя пользователя: пароль Строка должна быть закодирована с использованием схемы кодирования Base64. Таким образом, заголовок примера может выглядеть примерно так:
Authorization: Basic d2lraTpwZWRpYQ==
Как указано в остальной спецификации, связь между клиентом и сервером должна быть неактивной, вы должны включить заголовок с учетными данными для каждого запроса. Обычно вы используете cookie сеанса на стороне клиента, чтобы идентифицировать пользователя, чтобы он не мог вводить свои учетные данные по каждому запросу.
Сторона сервера
Чтобы проверить учетные данные внутри службы REST в Джерси, вам нужно поймать и перехватить все входящие запросы. Для этого Джерси предоставляет концепцию ContainerRequestFilters
. Например, если вы используете Tomcat, вы можете добавить фильтры этого типа внутри вашего определения сервлета в ваш web.xml следующим образом:
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param-value>your.package.BasicAuthFilter</param-value>
</init-param>
Называемый класс BasicAuthFilter
должен реализовать интерфейс Jerseys ContainerRequestFilter
и переопределить метод public ContainerRequest filter(ContainerRequest request)
. Внутри метода вы в основном выполните следующее:
- выборки учетных данных, основанных на Base64, из заголовка авторизации запроса
- декодировать их (т.е. используя
javax.xml.bind.DatatypeConverter.parseBase64Binary()
) - используйте UserDao (или другой поставщик данных), чтобы проверить правильность учетных данных.
- вернуть код состояния
401 Unauthorized
, если проверка не выполнена (т.е.throw new WebApplicationException(Status.UNAUTHORIZED)
) - если учетные данные действительны, просто верните запрос, чтобы делегировать его ресурсу Джерси, ответственному за его обработку.
Вы можете найти очень хороший пример в этом сообщении в блоге.