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

我们希望使用Spring安全性提供一项“身份验证”服务,

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

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

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

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

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

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

@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){
本文链接:https://www.f2er.com/3156464.html

大家都在问