上一篇我们通过注解实现服务调用认证,该认证也可以配置在yml中。
1、配置拦截器:feign会在实际请求前先走这个拦截器,这样可以把需要认证的信息在执行拦截器的时候加载进request请求中。
import feign.RequestInterceptor;
import feign.RequestTemplate;
public class MyBaseAuthRequestInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
//配置的是账号、密码编译后得到的字符
requestTemplate.header("Authorization","Basic cm9vdDpyb290");
}
}
为什么添加这个?feign的配置类里有对应的信息,我们这是自定义的形式重写了
2、检查feign注解修饰的调用接口
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.util.Map;
/**
* configuration :此时可以写默认的配置,也可不写
*/
@FeignClient(name = "test1",configuration = FeignClientsConfiguration.class)
public interface FeignTest1Service {
@RequestMapping(value = "/ribbonTest",method = RequestMethod.POST)
public String testFeign(@RequestBody Map<String,String> map);
}
feign方法上可以使用@RequestMapping、@ResponseBody进行修饰
feign方法参数可以使用@RequestBody、@RequestParam等修饰
3、配置yml
feign:
client:
config:
#指定服务配置
test1:
connect-timeout: 3000
read-timeout: 1500
logger-level: BASIC
request-interceptors:
- com.example.springcloud.ribbonfeign.interceptor.MyBaseAuthRequestInterceptor
启动项目后运行正常。