Я защитил веб-сервис с помощью @RolesAllowed ({"Клиент"}). Я успешно протестировал код и конфигурацию безопасности с помощью клиентского API Джерси. Сейчас я пытаюсь получить доступ к тому же сервису из JavaScript с помощью AJAX. Я устанавливаю учетные данные в открытом методе XMLHttpRequest:
xhr.open("GET", url, true, "bob", "paasss");
Это просто не сработает. Позвольте мне объяснить:
XHR сначала отправляет запрос без заголовка авторизации. Только если он встречает 401 статус ответа и заголовок "WWW-Authenticate", он повторяет запрос и на этот раз отправляет заголовок авторизации. Когда служба защищена с помощью @RolesAllowed, Джерси отправляет статус 403. Следовательно, заголовок авторизации никогда не отправляется.
Единственный способ заставить это работать - установить заголовок авторизации самостоятельно:
xhr.setRequestHeader("Authorization", "Basic Ym9iOnBhc3N3MHJk");
Это приемлемый способ ведения дел? Можно ли как-то заставить Джерси вернуть 401 вместо 403, а также заголовок "WWW-Authenticate"?
Спасибо!