【问题标题】:how to forward requests to another microservice using Spring?如何使用 Spring 将请求转发到另一个微服务?
【发布时间】:2020-03-02 07:10:52
【问题描述】:

我们希望使用 Spring Security 提供“身份验证”服务,该服务:

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

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

【问题讨论】:

  • 在提出家庭作业问题时,请表现出您最好的诚意尝试解决它,并告诉我们您遇到了哪些问题,以便我们更好地了解您的意图、您可能做错的事情以及您的目标。请浏览tourhelpHow to Ask 部分,了解本网站的工作原理并帮助您改进当前和未来的问题。也请看看How do I ask and answer Homework questions?
  • 一种简单的方法是构建一个反向代理应用程序,使用 Netflix Zuul 将请求转发到另一个服务。但是我不确定Zuul是否可以与Spring Security集成,或者你必须自己实现一个过滤器。
  • 请先尝试解决它,并询问您是否使用代码 sn-p 卡在您的解决方案中。

标签: java spring spring-boot spring-mvc spring-security


【解决方案1】:

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

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

要调用远程服务(在本例中为身份验证服务),我们可以使用 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){

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 2014-04-07
    • 2011-09-03
    • 2018-05-22
    相关资源
    最近更新 更多