1.方式一: @RequestHeader注解添加参数到请求头
@FeignClient(value="${app.feign.url:app-server-name/appcontext}")
public interface MyTestFeign {
@GetMapping("/test")
String test(@RequestParam("param1") String param1,
@RequestParam("param2") String param2,
@RequestParam("param3") String param3,
@RequestHeader(name = "Token",required = true) String token);
}
2.方式二: 实现RequestInterceptor接口: feign全局设置
package com.qin.feign.interceptor;
import feign.RequestInterceptor;
import feign.RequestTemplate;
@Configuration
public class MyFeignRequestInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
requestTemplate.header("Token", "your token value");
}
}
@FeignClient(value="${app.feign.url:app-server-name/appcontext}",configuration = MyFeignRequestInterceptor.class)
public interface MyTestFeign {
@GetMapping("/test")
String test(@RequestParam("param1") String param1,
@RequestParam("param2") String param2,
@RequestParam("param3") String param3,
@RequestHeader(name = "Token",required = true) String token);
}
3.方式三: aop切面
3.1.注解
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
}
3.2.切面
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Objects;
public class MyFeignAspect {
@Pointcut("@annotation(com.qin.annotation.MyAnnotation)")
public void annotationPointCut() {
}
@Before("annotationPointCut()")
public void doBefore() {
HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
HeaderMapRequestWrapper requestWrapper = new HeaderMapRequestWrapper(request);
requestWrapper.setHeader("Token", "your token value");
}
}
3.3.适配类
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.util.*;
public class HeaderMapRequestWrapper extends HttpServletRequestWrapper {
private Map<String, String> headerMap = new HashMap<>();
public HeaderMapRequestWrapper(HttpServletRequest request) {
super(request);
}
public void setHeader(String name, String value) {
headerMap.put(name, value);
}
@Override
public String getHeader(String name) {
String headerValue = super.getHeader(name);
if (headerMap.containsKey(name)) {
headerValue = headerMap.get(name);
}
return headerValue;
}
@Override
public Enumeration<String> getHeaderNames() {
List<String> names = Collections.list(super.getHeaderNames());
headerMap.keySet().forEach(names::add);
return Collections.enumeration(names);
}
@Override
public Enumeration<String> getHeaders(String name) {
List<String> values = Collections.list(super.getHeaders(name));
if (headerMap.containsKey(name)) {
values = Collections.singletonList(headerMap.get(name));
}
return Collections.enumeration(values);
}
}
3.4.接口
@FeignClient(value="${app.feign.url:app-server-name/appcontext}")
public interface MyTestFeign {
@GetMapping("/test")
@MyAnnotation
String test(@RequestParam("param1") String param1,
@RequestParam("param2") String param2,
@RequestParam("param3") String param3);
}