1

我想使用 FEIGN 和 SEEDSTACK 从我的客户端应用程序调用 REST Web 服务。使用 SEEDSATCK 开发的 Web 服务也配置了以下身份验证方法:“filters: [authcBasic]”

如何配置或编程客户端以获得身份验证权?如何传递 USER 和 PASSWORD 信息?

客户端 FEIGNAPI 类:

@FeignApi
public interface neosdServer {

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

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

客户端应用程序.YAML

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

服务器应用程序.YAML

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

1 回答 1

2

当前的 SeedStack 集成暂时不支持在 feign builder 上配置拦截器。相反,要进行身份验证,您可以在 Feign 接口中使用@Headers注释指定标头(基本身份验证示例):

@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 。

于 2020-01-30T13:03:57.993 回答