1. 程式人生 > 實用技巧 >Feign的攔截器,用於在微服務間使用feign遠端呼叫其他微服務時,傳遞令牌

Feign的攔截器,用於在微服務間使用feign遠端呼叫其他微服務時,傳遞令牌

package com.changgou.interceptor;

import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestAttribute;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.util.Enumeration; @Component public class FeignInterceptor implements RequestInterceptor { @Override
public void apply(RequestTemplate requestTemplate) { //傳遞令牌 RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); if(requestAttributes != null){ HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
if(request != null){ Enumeration<String> headerNames = request.getHeaderNames(); while (headerNames.hasMoreElements()){ String headerName = headerNames.nextElement(); if("authorization".equals(headerName)){ String headerValues = request.getHeader(headerName);//得到的內容為 Bearer jwt令牌 //傳遞令牌 requestTemplate.header(headerName,headerValues); } } } } } }

使用時直接放在工程中即可,建議放在公共模組,並用其他模組引入公共模組

1

1