Как настроить FEIGN на клиенте для аутентификации в REST-сервисе с использованием инфраструктуры SEEDSTACK? - PullRequest
1 голос
/ 30 января 2020

Я хотел бы вызвать веб-сервис REST из моего клиентского приложения, используя FEIGN и SEEDSTACK. Веб-сервис, который также разработан с помощью SEEDSATCK, настраивается с использованием следующего метода аутентификации: "filters: [authcBasi c]"

Как настроить или запрограммировать клиент для получения права аутентификации ? Как передать информацию о ПОЛЬЗОВАТЕЛЕ и ПАРОЛЕ?

класс клиента FEIGNAPI:

@FeignApi
public interface neosdServer {

    @RequestLine("GET /file/getfilesprop")
    List<NeosdFile> getfilesprop();

    @RequestLine("GET /file/getfiles")
    List<String> getfiles();
}

клиент APPLICATION.YAML

feign:
  endpoints:
    neosdClient.interfaces.rest.neosdServer: 
      baseUrl: http://localhost:8080
      encoder: feign.jackson.JacksonEncoder
      decoder: feign.jackson.JacksonDecoder

сервер APPLICATION.YAML

  web:
    urls:
      -
        pattern: /file/getfiles
        filters: [ authcBasic, 'roles[read]' ]   

1 Ответ

1 голос
/ 30 января 2020

Текущая интеграция SeedStack не поддерживает настройку перехватчиков на симуляторе. Вместо этого, чтобы выполнить аутентификацию, вы можете указать заголовок в своем интерфейсе Feign с аннотацией @Headers (пример для аутентификации basi c):

@FeignApi
@Headers({"Authorization: Basic {credentials}"})
public interface neosdServer {

    @RequestLine("GET /file/getfilesprop")
    List<NeosdFile> getfilesprop(@Param("credentials") String credentials);

    @RequestLine("GET /file/getfiles")
    List<String> getfiles(@Param("credentials") String credentials);
}

Обратите внимание, что @Headers также может использоваться на отдельных методы.

Затем вам нужно будет передать учетные данные в качестве параметра метода. Пример реализации с учетными данными, поступающими из конфигурации приложения, может быть следующим:

public class MyClass {
    @Configuration("myApp.credentials.user")
    private String username;
    @Configuration("myApp.credentials.password")
    private String password;
    @Inject
    private NeoSdClient client;

    public void myMethod() {
        List<String> files = client.getFiles(encodeCredentials());
    }

    private String encodeCredentials() {
        return BaseEncoding
                .base64()
                .encode((username + ":" + password)
                        .getBytes(Charsets.UTF_8));
    }
}

Я создал проблему в дополнительном репозитории Feign для отслеживания реализации поддержки перехватчиков: https://github.com/seedstack/feign-addon/issues/4.

...