設置Feign的Header信息(兩種形式)

 在使用微服務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 { }

希望可以幫助到大家,也喜歡大家分享自己的想法嘻嘻

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章