之前都是用的springclou是eureka,现在使用nacos作为注册发现中心,同样feign调用的使用过程中踩过一些坑。
1.声明式调用
feign使用具体详见spring cloud alibaba教程:如何使用nacos服务注册和发现 - 方志朋的博客
2.服务之间接口调用有的需要token之类的校验
理论上只需要在调用方的请求的header中加入token就可以了,具体token获取还是生成需要调用方自己负责。举个例子:业务系统调用权限系统的角色权限接口时需要token,我们可以从request中获取到的token进而放到feign的调用中即可。下边看操作!
@Configuration
public class FeignConfig implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
// 获取当前请求
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
// 获取request
HttpServletRequest request = attributes.getRequest();
// 获取Header中的tokenValue
String token = request.getHeader("Authorization");
//这里转换一下可能postman请求过来的会有"Bearer "
String jwtToken = token.replace("Bearer ", "");
// 注入Feign的请求中,这里header中token的key需要和被调用方一致
requestTemplate.header("Authorization", jwtToken);
}
}
然后再在声明式调用的接口上增加此configuration
@FeignClient(name = "k_man-api-test", configuration = FeignConfig.class)
public interface CpFeign {
/**
* 根据adminId获取Admin权限等信息
*/
@GetMapping("/admin/personActions/{id}")
AdminVO getAdminInfoList(@PathVariable("id") Long id);
}
到此结束被调用方在拦截器中即可获取header中的token