SpringSecurityOAuth2(9) feign 微服务间调用 token验证

GitHub地址

码云地址

Feign可以调用其他微服务的api接口,当其他服务没有权限验证的时候可以直接调用,但是调用服务存在权限拦截的话,就无法正常调用。本文讲的就是Feign调用认证api的一种方式。

首先新建一个fp-resouce-feign模块做调用测试,本模块不加OAuth2的拦截。

pom.xml增加常规依赖以及Feign的依赖

1 <!--Feign依赖--> 2 <dependency> 3 <groupId>org.springframework.cloud</groupId> 4 <artifactId>spring-cloud-starter-openfeign</artifactId> 5 </dependency>

在启动文件上加上@EnableFeignClients 注解表示启用Feign; 新建一个简单的Feign调用,这里我们调用manager服务,该服务增加了SpringSecurityOAuth2的权限拦截

1@FeignClient(value = "manager") 2public interface ResourceManagerFeignClient { 3 @GetMapping(value = "/auth/hello") 4 String hello(); 5}

对有权限处理的服务接口直接调用会造成调用时出现http 401未授权的错误,继而导致最终服务的http 500内部服务器错误 请求示例如图:

最方便的方案就是咋请求头上加上认证token信息,Feign 有一个接口 RequestInterceptor,做一些简单的添加token处理即可调用服务接口:

1@Configuration 2public class FeignConfig implements RequestInterceptor { 3 4 public static String TOKEN_HEADER = "authorization"; 5 6 @Override 7 public void apply(RequestTemplate template) { 8 template.header(TOKEN_HEADER, getHeaders(getHttpServletRequest()).get(TOKEN_HEADER)); 9 } 10 11 private HttpServletRequest getHttpServletRequest() { 12 try { 13 return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); 14 } catch (Exception e) { 15 return null; 16 } 17 } 18 19 private Map<String, String> getHeaders(HttpServletRequest request) { 20 Map<String, String> map = new LinkedHashMap<>(); 21 Enumeration<String> enumeration = request.getHeaderNames(); 22 while (enumeration.hasMoreElements()) { 23 String key = enumeration.nextElement(); 24 String value = request.getHeader(key); 25 map.put(key, value); 26 } 27 return map; 28 } 29} 30

结果示例:

至此Feign调用有权限服务接口的简单实现完成。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

SpringSecurityOAuth2(5)自定义登录登出

GitHub地址(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2Fweizongwu%2FSpringCloudOAuth2SpringSecurityFrame.git"项目地址")码云地址(https://gitee.com/wujishu/

SpringSecurityOAuth2(8) swagger2 集成OAuth2

GitHub地址(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2Fweizongwu%2FSpringCloudOAuth2SpringSecurityFrame.git"项目地址")码云地址(https://gitee.com/wujishu/

SpringSecurityOAuth2(3)自定义token信息

GitHub地址(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2Fweizongwu%2FSpringCloudOAuth2SpringSecurityFrame.git"项目地址")码云地址(https://gitee.com/wujishu/