[英]How to configure FEIGN on the client to authenticate against a REST service using SEEDSTACK framework?
我想使用 FEIGN 和 SEEDSTACK 从我的客户端应用程序调用 REST Web 服务。 同样使用 SEEDSATCK 开发的 Web 服务配置了以下身份验证方法:“过滤器:[ 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]' ]
当前的 SeedStack 集成暂时不支持在 feign builder 上配置拦截器。 相反,要进行身份验证,您可以使用@Headers
注释在 Feign 界面中指定一个标头(基本身份验证示例):
@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 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.