繁体   English   中英

如何使用 Spring 将请求转发到另一个微服务?

[英]how to forward requests to another microservice using Spring?

我们希望使用 spring 安全性来提供“身份验证”服务,其中:

  1. 验证传入请求,
  2. 如果成功,将userid添加到 http header
  3. 将请求(带有标头)转发到另一个服务

使用 Spring 实现这种转发的最简单方法是什么?

对于这个用例,我们可以创建一个新的 Spring 启动应用程序(主要称为 API 网关),它启用 Zuul 代理 ( EnableZuulProxy )。 创建一个自定义 Zuul PRE_TYPE过滤器来解析所有传入的请求。 它的目标是检查传入的请求是否包含令牌,然后调用身份验证服务,检索调用者的信息并将用户的标识符添加到自定义 header 中。

一旦传入请求通过所有过滤器,然后使用zuul.routes.*属性将请求转发到适当的服务。

要调用远程服务(在本例中为身份验证服务),我们可以使用 Spring 的RemoteTokenServices class。 并且, BearerTokenExtractor class 用于从传入请求中提取令牌。 这是帮助您入门的示例代码:

@Override
public Object run() {
    final RequestContext requestContext = RequestContext.getCurrentContext();
    final HttpServletRequest request = removeCustomHeaders(requestContext.getRequest());

    requestContext.setRequest(request);

    final Authentication authentication = tokenExtractor.extract(request);

    if (Objects.nonNull(authentication)) {
        try {
            final OAuth2Authentication oAuth2Authentication = tokenServices.loadAuthentication(authentication.getPrincipal().toString());

            final Map<String, String> userAuthDetails = (Map<String, String>) oAuth2Authentication.getUserAuthentication().getDetails();
            requestContext.addZuulRequestHeader(USERNAME_HEADER, oAuth2Authentication.getPrincipal().toString());
            // Add other required information in headers. 
        }
     catch(final AuthenticationException | RestClientException |OAuth2Exception e){

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM