当前位置: 首页 > news >正文

百度网站怎么制作广州网站优化公司

百度网站怎么制作,广州网站优化公司,怎么做网站推,实名制认证网站说明:在微服务架构中,用户身份经网关验证后,我们可以将用户信息,如ID加入到请求头上。后面的微服务中,可以设置一个拦截器,拦截请求,获取请求头上的用户ID,加入到ThreadLocal中。 最…

说明:在微服务架构中,用户身份经网关验证后,我们可以将用户信息,如ID加入到请求头上。后面的微服务中,可以设置一个拦截器,拦截请求,获取请求头上的用户ID,加入到ThreadLocal中。

最重要的是,在当前微服务发起请求,调用其他微服务时,需要将发出去的请求再进行拦截,把本地线程池中的用户ID再次放入到请求头中,这样就实现了用户信息在微服务中的流转,称为参数透传。本文介绍,上述参数透传的实现。

在这里插入图片描述

在微服务系统中,一般都会有一个共同模块,是所有微服务共同引用的模块,比如模块名为Base、Util、Feign-API,我们可以把参数透传的拦截器写在这个模块里面,这样其他微服务就不用再写拦截器的配置类了。

比如,我当前的这个系统,Feign-API模块是所有微服务共同引用的。里面写了一些共同的DTO对象,以及Feign-Client类对象;

在这里插入图片描述

实现

第一步:创建ThreadLocal类

在FeignAPI模块中,创建一个本地线程池对象,用于存储当前用户的ID;

/*** 本地线程池*/
public class TokenThreadLocal {private static final ThreadLocal<Long> THREAD_LOCAL= new ThreadLocal<>();/*** 设置* @param tokenId*/public static void set(Long tokenId){THREAD_LOCAL.set(tokenId);}/*** 获取* @return*/public static Long get(){return THREAD_LOCAL.get();}/*** 移除*/public static void remove(){THREAD_LOCAL.remove();}
}

第二步:创建MVC拦截器

在FeignAPI模块中,创建MVC拦截器(HandlerInterceptor),拦截路径为所有路径;

package com.hzy.interceptor;import com.hzy.config.TokenThreadLocal;
import org.springframework.http.HttpStatus;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** 接收请求拦截器*/
public class AuthorizationInterceptor implements HandlerInterceptor {/*** 收到请求会执行的方法* @param request* @param response* @param handler* @return* @throws Exception*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 获取请求头中的用户IDString id = request.getHeader("authorization");// 判断用户ID是否为空if (id != null && id != ""){// 将字符串转换为Long类型long l = Long.parseLong(id);// 将用户ID存入ThreadLocal中TokenThreadLocal.set(l);}else {responseHandler(response);return false;}// 放行return true;}/*** 请求返回客户端之前会执行的方法* @param request* @param response* @param handler* @param modelAndView* @throws Exception*/@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);}/*** 请求到客户端之后会执行的方法* @param request* @param response* @param handler* @param ex* @throws Exception*/@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {TokenThreadLocal.remove();}/*** 用户尚未登录的返回信息* @param response* @return* @throws IOException*/private boolean responseHandler(HttpServletResponse response) throws IOException {// 设置响应状态码 401 如果用户未登录 状态码都返回401response.setStatus(HttpStatus.UNAUTHORIZED.value());// 响应的数据类型和编码格式response.setContentType("application/json;charset=UTF-8");// 提示信息response.getWriter().write("用户未登录");return false;}
}

拦截器配置类,设置为所有路径请求都拦截;

import com.hzy.interceptor.AuthorizationInterceptor;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/*** 接收请求拦截器配置类*/
public class MVCInterceptorConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new AuthorizationInterceptor()).addPathPatterns("/**");}
}

第三步:创建Feign拦截器

创建Feign的拦截器(RequestInterceptor),该拦截器用于拦截当前微服务发出去的请求,代码内容写把当前本地线程池的用户ID再次放入到请求头中,传给下游微服务解析;

import com.hzy.config.TokenThreadLocal;
import feign.RequestInterceptor;
import feign.RequestTemplate;/*** 发送请求拦截器*/
public class AuthorizationRequestInterceptor implements RequestInterceptor {@Overridepublic void apply(RequestTemplate requestTemplate) {// 从本地线程池中获取用户ID,放入请求头中requestTemplate.header("authorization",TokenThreadLocal.get().toString());}
}

测试

测试订单服务,生成订单中,会调用库存服务,查询库存信息。在MVC、Feign拦截器、调用库存服务行分别打断点,发送请求,查看执行过程;

在这里插入图片描述

请求通过网关,先被订单服务的MCV拦截器拦截到,可以看到当前用户的ID是2,放行……

在这里插入图片描述

然后,断点来到订单服务的,调用库存服务这里,放行,查看发出去的请求会不会被拦截住;

在这里插入图片描述

断点被Feign拦截器(RequestInterceptor)拦住,将参数放入到请求头中,放行……

在这里插入图片描述

请求又来到了MVC拦截器,注意哦,这里不是订单服务,是库存服务的拦截器;

itemId

这样,就实现了用户参数在微服务系统中的流转。

总结

使用一前一后两个拦截器,对微服务接受请求前,发送请求前分别进行拦截,实现参数透传。但是需要注意以下两点:

  • 两个拦截器所依赖的是本地线程池,所以如果微服务发出的是异步消息(如MQ),就行不通(参考:http://t.csdn.cn/wWsb7);

  • 拦截器是写在共同模块中的,所以参数得以流转的前提是当前微服务引用了共同模块

http://www.yidumall.com/news/90429.html

相关文章:

  • 电脑怎么创建网站百度优化公司
  • 玩具公司网站开发论文百度推广获客方法
  • 网站广告下悬浮代码怎么做市场调研分析报告
  • 学校网站建设培训心得体会广州网络营销运营
  • 建筑人才网邀约投递做排名优化
  • 怎么找到仿牌外贸出口公司的网站网盘资源免费观看
  • 网站安全认证去哪做手机百度app免费下载
  • 郧阳网站建设如何让网站被百度收录
  • 海南七星彩网站建设电工培训课程
  • 郑州网站建设首选创新seo优化网站源码
  • 做cpa色诱网站用什么域名空间建站三只松鼠网络营销案例分析
  • 2017做那个网站能致富营销课程培训
  • 电子商务网站建设移动电商开发昆明自动seo
  • 西宁seo网站建设网络推广和seo
  • 东营网站建设seo百度站长工具验证
  • 网站建设资源网页优化seo广州
  • 网站开发建设付款方式网络销售是什么工作内容
  • 济南莱芜金点子信息港seo整站优化报价
  • 南通网站优化百度seo引流
  • 中国工业设计十佳公司整站优化seo平台
  • 网站开发技术服务费合同今日国内新闻头条新闻
  • 成品网站模块甘肃网站推广
  • 私人定制平台网站国外独立网站如何建站
  • soho 网站建设电商网站排名
  • 南昌制作网站的公司百度关键词查询
  • 仿动态网站优秀网页设计赏析
  • 青岛中小微企业互联网站建设补贴快速学电脑培训班
  • 做网站首页的软件手机优化软件下载
  • 漂浮广告网站百度推广官网入口
  • 北京网站优化外包站长之家seo综合