在某些场景下,前文自定义Feign的方式满足不了需求,此时可使用Feign Builder API( https://github.com/OpenFeign/feign/#basics )手动创建Feign。
本节围绕以下场景,为大家讲解如何手动创建Feign。
●用户微服务的接口需要登录后才能调用,并且对于相同的API,不同角色的用户有不同的行为。
●让电影微服务中的同一个Feign接口使用不同的账号登录,并调用用户微服务的接口。
首先来改写用户微服务。
1.复制项目microservice-provider-user,将ArtifactId修改为microservice-provider-user-with-auth。
2.为项目添加以下依赖。
3.创建Spring Security的配置类。
代码中模拟了两个账号:user和admin,它们的密码分别是password1和password2,角色分别是user-role和admin-role。
4.修改Controller,在其中打印当前登录的用户信息。
测试
1.启动microservice-discovery-eureka。
2.启动microservice-provider-user-with-auth。
3.访问 http://localhost:8000/1 ,将弹出登录对话框,如图6-1所示。
4.使用user/password1登录,可看到类似如下的日志。
5.使用admin/password2登录,可看到类似如下的日志。
图6-1 用户微服务登录对话框
修改好用户微服务后,接下来修改电影微服务。
1.复制项目microservice-consumer-movie-feign,将ArtifactId修改为microservice-consumer-movie-feign-manual。
2.去掉Feign接口UserFeignClient上的@FeignClient注解。
3.去掉启动类上的@EnableFeignClients注解。
4.修改Controller如下:
其中,@Import导入的FeignCl ientsConf iguration是Spring Cloud为Feign默认提供的配置类。
userUserFeignClient登录账号user,adm inUserFeignClient登录账号admin,它们使用的是同一个接口UserFeignClient。
测试
1.启动microservice-discovery-eureka。
2.启动microservice-provider-user-with-auth。
3.启动microservice-consumer-movie-feign-manual。
4.访问 http://localhost:8010/user-user/1 ,可以正常获得查询结果,同时可以看到用户微服务打印类似如下的日志:
5.访问 http://localhost:8010/user-admin/1 ,可以正常获得查询结果,同时可以看到用户微服务打印类似如下的日志:
由测试不难发现,手动创建Feign的方式更加灵活。