Spring-boot Zuul: передача идентификатора пользователя между микросервисами

У меня есть прокси Zuul Gateway, где я проверяю авторизацию токена, полученного от пользователя. Теперь, когда этот запрос передается другим микросервисам для получения пользовательских данных, пользовательская информация должна передаваться от шлюза к микросервису.

Прямо сейчас я добавил идентификатор пользователя в заголовок запроса и получаю его на соответствующем контроллере микросервиса, используя API header аннотаций.

Это правильный способ передачи пользовательской информации. Есть ли другой лучший способ?

1 ответ

В случае, если кто-то все еще сталкивается с этой проблемой,

В Zuul Proxy добавьте заголовок в RequestContext, как показано ниже:

      userId = jwtTokenUtil.getUsernameFromToken(jwtToken);

RequestContext ctx = RequestContext.getCurrentContext();
ctx.addZuulRequestHeader("userId", userId);

А затем в соответствующих микросервисах напишите собственный фильтр и извлеките значение, как показано ниже.

      @Component
public class MyFilter extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(HttpServletRequest request,
                                HttpServletResponse response,
                                FilterChain filterChain)
                                throws ServletException, IOException {

        String userId = request.getHeaders("userId").nextElement();
    
        logger.info("userId: "+userId);
    
        filterChain.doFilter(request, response);
    }

}
Другие вопросы по тегам