内容简介:在微服务架构里,服务与服务之间的调用一般用feign就可以实现,它是一种可视化的rpc,并且集成了ribbon的负载均衡能力,所以很受欢迎。在授权服务里,用户通过用户名密码,或者手机和验证码等方式登陆之后,在http头里会有而在业务层里,服务与服务之间使用feign来实现调用,而授权的代码我们可以通过拦截器实现,在feign请求之前,把当前服务的token添加到目标服务的请求头就可以了,一般是这样实现的。
在微服务架构里,服务与服务之间的调用一般用feign就可以实现,它是一种可视化的rpc,并且集成了ribbon的负载均衡能力,所以很受欢迎。
授权服务
在授权服务里,用户通过用户名密码,或者手机和验证码等方式登陆之后,在http头里会有 授权
的标识,在客户端调用时,需要添加当时有效的token才可以正常访问被授权的页面。
Content-Type:application/json Authorization:Bearer d79c064c-8675-4047-a119-fac692e447e8
而在业务层里,服务与服务之间使用feign来实现调用,而授权的代码我们可以通过拦截器实现,在feign请求之前,把当前服务的token添加到目标服务的请求头就可以了,一般是这样实现的。
/** * 发送FeignClient设置Header信息. * http://www.itmuch.com/spring-cloud-sum/hystrix-threadlocal/ * Hystrix传播ThreadLocal对象 */ @Component public class TokenFeignClientInterceptor implements RequestInterceptor { /** * token放在请求头. * * @param requestTemplate 请求参数 */ @Override public void apply(RequestTemplate requestTemplate) { RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes(); if (requestAttributes != null) { HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest(); String token = request.getHeader(TokenContext.KEY_OAUTH2_TOKEN); requestTemplate.header(TokenContext.KEY_OAUTH2_TOKEN, new String[] {token}); } } }
上面的拦截器代码没有什么问题,也很好理解,但事实上,当你的feign开启了hystrix功能,如果开启了,需要把hystrix的策略进行修改,默认是 THREAD
的,这个级别时ThreadLocal是空的,所以你的授权不能传给feign的拦截器.
hystrix.command.default.execution.isolation.strategy: SEMAPHORE
资源项目里获取当前用户
在另一个项目,需要其它获取当前用户,需要使用下面的代码。
- 先配置一个授权的地址
security: oauth2: resource: id: user user-info-uri: http://${auth.host:localhost}:${auth.port:8002}/user # 这里是授权服务的地址,即auth-service prefer-token-info: false auth: host: localhost #这个不可以用eureka里的服务名,只能使用docker-compose里的服务名 port: 8002
- 下面的代码用来获取当前用户
Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); String user = objectMapper.writeValueAsString(authentication.getPrincipal());
本讲主要对feign的请求头传递信息进行讲解,开发时遇到的坑总节了一下,分享给大家!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- vue组件之间的数据传递方法
- C++ 值传递、指针传递、引用传递详解
- 简明笔记:指针传递和值传递
- golang中的函数参数值传递和引用传递
- 现代编程语言的值传递与引用传递
- 这一次,彻底解决Java的值传递和引用传递
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Introduction to Linear Optimization
Dimitris Bertsimas、John N. Tsitsiklis / Athena Scientific / 1997-02-01 / USD 89.00
"The true merit of this book, however, lies in its pedagogical qualities which are so impressive..." "Throughout the book, the authors make serious efforts to give geometric and intuitive explanations......一起来看看 《Introduction to Linear Optimization》 这本书的介绍吧!
随机密码生成器
多种字符组合密码
HTML 编码/解码
HTML 编码/解码