在使用微服務SpringCloud全家桶組件Fegin的時候,我們在進行遠程服務之間調用的同時,爲了防止客戶端劫持信息,我們需要將一些敏感信息添加到我們的Fegin頭部(Header)當中,今天朋友問起,總結一下:那麼工作中常見的方式有兩種
1.在方法參數前面添加@RequestHeader註解
@PostMapping(value = "/getPersonDetail")
public ServerResponse getPersonDetail(@RequestBody Map map,@RequestHeader(name = "id") String id);
使用@RequestHeader(name = "id")可以傳遞動態header屬性
2.實現RequestInterceptor接口,設置Header(所有的Fegin請求)
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import feign.RequestInterceptor;
import feign.RequestTemplate;
@Configuration
public class FeignConfiguration implements RequestInterceptor {
@Override
public void apply(RequestTemplate template) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
Enumeration<String> headerNames = request.getHeaderNames();
if (headerNames != null) {
while (headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
String values = request.getHeader(name);
template.header(name, values);
}
}
}
}
@Component
@FeignClient(value = "abc",fallback = abcServiceHystric.class ,configuration = FeignConfiguration.class) public interface AbcService { }
希望可以幫助到大家,也喜歡大家分享自己的想法嘻嘻