远程调用携带Token令牌,请求携带请求头信息。
来源:https://zhuyb.blog.csdn.net/article/details/129965686
OpenFeign调用微服务时RequestInterceptor或@RequestHeader传递http请求头信息
1、 触发拦截器
// 通过配置configuration进行触发拦截器.
@FeignClient(name = "admin-service", url = "${feign.property.admin-url}",
configuration = SecurityInterceptor.class)
@Component
public interface AdminFeign {
/**
* 已读新闻
*
* @param id 新闻 ID
* @param platform 平台
* @return {@link Result}<{@link Void}>
*/
@PostMapping("/sociality/news/{id}/read/platform/{platform}")
Result<Void> newsRead(@PathVariable(value = "id") Long id,
@PathVariable(value = "platform") String platform);
}
// 方式2:自定义拦截器
import feign.RequestInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Description : Feign拦截器
* @Author : LiYan
* @CreateTime : 2023/12/21 18:29
*/
@Configuration
public class FeignConfig {
/**
* 注入自定义的拦截器
*/
@Bean
public RequestInterceptor requestInterceptor() {
return new SecurityInterceptor();
}
}
2、配置拦截器
import feign.RequestInterceptor;
import feign.RequestTemplate;
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;
/**
* @Description :
* @Author : LiYan
* @CreateTime : 2023/12/21 16:26
*/
public class SecurityInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
if (null!= requestAttributes) {
HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
requestTemplate.header("access-token", request.getHeader("access-token"));
}
}
}