Я пишу коннектор REST для HP Quality Center, используя Apache CFX. Я хотел бы использовать инфраструктуру CFX для выполнения упреждающей аутентификации при отправке запроса на сервер.
HP Quality Center использует механизм проверки подлинности на основе Basic. Для аутентификации запрос на получение отправляется по адресу http:///qcbin/authentication-point/authenticate со стандартным заголовком базовой аутентификации. Затем сервер возвращает файл cookie («LWSSO»), который необходимо включать во все последующие запросы. Запрос ресурса с сервера перед аутентификацией приведет к ошибке 401 с заголовком WWW-Authenticate, который содержит URI точки аутентификации (например, LWSSO realm="http://:80/qcbin/authentication-point").
В идеале я хотел бы создать CFX HttpAuthProvider или Interceptor, который обрабатывает аутентификацию, перехватывая ответ 401, анализируя заголовок WWW-Authenticate и выполняя запрос на URI точки аутентификации перед кэшированием файла cookie для всех последующих запросов.
Это позволило бы мне создать чистый API на основе прокси, используя фабричный шаблон. Например:
public QualityCenter create(String url, String username, String password) {
JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
bean.setAddress(url);
bean.setUsername(username);
bean.setPassword(password);
bean.setServiceClass(QualityCenter.class);
// TODO: Setup authentication modules here that use AuthPolicy for credentials.
return bean.create(QualityCenter.class);
}
Я просто не могу понять, возможно ли это и где лучше всего реализовать функциональность.