ZuulFilter的使用场景

各个微服务的访问需要网关统一管理进行跳转,而在访问网关时,我们可以进行增强功能,通过过虑器实现请求过虑,身份校验

等。

/*** 身份校验过滤器*/
@Component
public class LoginFilter extends ZuulFilter {@AutowiredAuthService authService;/*** 过滤器类型 4种*  pre:请求在被路由之前*  执行routing:在路由请求时调用*  post:在routing和errror过滤器之后调用*  error:处理请求时发生错误调用* @return*/@Overridepublic String filterType() {//return null 会导致 FilterProcessor - null异常return "pre";}/*** 过滤器序号* 越小越优先被执行* @return*/@Overridepublic int filterOrder() {return 0;}//是否执行过滤器@Overridepublic boolean shouldFilter() {//返回true表示执行此过滤器return true;}//过滤器得内容//过虑所有请求,判断头部信息是否有Authorization,如果没有则拒绝访问,否则转发到微服务。@Overridepublic Object run() throws ZuulException {RequestContext requestContext = RequestContext.getCurrentContext();//得到requestHttpServletRequest request = requestContext.getRequest();HttpServletResponse response = requestContext.getResponse();//cookieString tokenFormCookie = authService.getTokenFormCookie();if(StringUtils.isEmpty(tokenFormCookie)){access_denied();return null;}//hearString tokenFormHeader = authService.getTokenFormHeader(request);if(StringUtils.isEmpty(tokenFormHeader)){access_denied();return null;}//redislong expireFormRedis = authService.getExpireFormRedis(tokenFormCookie);if(expireFormRedis<0){access_denied();return null;}return null;}//拒绝访问private void access_denied(){RequestContext requestContext = RequestContext.getCurrentContext();//得到requestHttpServletRequest request = requestContext.getRequest();HttpServletResponse response = requestContext.getResponse();//拒绝访问requestContext.setSendZuulResponse(false);//回复响应requestContext.setResponseStatusCode(200);ResponseResult responseResult = new ResponseResult(CommonCode.UNAUTHENTICATED);String s = JSON.toJSONString(responseResult);requestContext.setResponseBody(s);response.setContentType("application/json;charset=utf-8");}}

@service

@Service
public class AuthService {@AutowiredStringRedisTemplate stringRedisTemplate;//从cookie中获取jwt令牌public String getTokenFormCookie() {HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();Map<String, String> map = CookieUtil.readCookie(request, "uid");if(map!=null&&map.get("uid")!=null){return map.get("uid");}return null;}//从请求头中获取jwt令牌public String getTokenFormHeader(HttpServletRequest request) {String authorization = request.getHeader("Authorization");if(StringUtils.isEmpty(authorization)){return null;}if(!authorization.startsWith("Bearer ")){return null;}String jwt = authorization.substring(7);return jwt;}//从redis获取过期时间public long getExpireFormRedis(String access_token){String key ="user_token:" + access_token;Long expire = stringRedisTemplate.getExpire(key, TimeUnit.SECONDS);return expire;}
}

可以从代码中看到,我们LoginFilter继承ZuulFilter后实现4个子方法,分别是1.过滤器的类型(处理时机), 2.此过滤器的优先级 3.是否执行此过滤器 4.过滤器的内容。  

我们实现了一个在请求被路由之前的身份验证功能,在4中获取request中的

1.判断request中的cookie是否有jwt身份短令牌,没有则拒绝访问

2.判断request的Header中是否有jwt令牌,没有则拒绝访问

3.判断redis中此令牌是否过期,过期则拒绝访问

最后,都满足则路由跳转至指定微服务,不满足则response返回未登录授权异常

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570972.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习实战 k-近邻算法 手写识别系统

转载于:https://www.cnblogs.com/crysa/p/8735556.html

Fegin拦截器解决各微服务之间数据下沉

上篇说了当前端访问微服务网关&#xff0c;借助ZuulFilter过滤器来过滤所有请求&#xff0c;获取request&#xff0c;判断cookie是否有身份短令牌&#xff0c;request的header中是否有Jwt令牌&#xff0c;redis中是否有Jwt令牌。但是这个数据传递只能是前端访问微服务时&#x…

免杀原理与实践

杀软原理 目前杀毒软件的原理主要有3种&#xff1a; 1.引擎与病毒库的交互作用&#xff0c;通过特征码提取与病毒库中的特征码进行比对识别病毒。 2.启发式Heuristic&#xff0c;通过程序的一些行为和特征来判断。 3.在虚拟机技术上的启发式&#xff0c;通过建立一个虚拟环境运…

分布式事务的理解和解决方法

什么是分布式事务&#xff1f; 什么是分布式系统?部署在不同结点上的系统通过网络交互来完成协同工作的系统。 比如&#xff1a;充值加积分的业务&#xff0c;用户在充值系统向自己的账户充钱&#xff0c;在积分系统中自己积分相应的增加。充值系统和积分系统是两个不同的系统…

delphi 搭建安卓开发环境

delphi 搭建安卓开发环境 DELPHI安装成功以后&#xff0c;怀着激动的心情&#xff0c;使用IDE向导生成安卓DEMO程序&#xff0c;BUILD&#xff0c;想马上看到编译成功的提示&#xff0c;结果报错&#xff0c;不由得傻眼了。DELPHI怎么这么差&#xff1f; 原来DELPHI安装成功以后…

ServiceComb抛出llegalStateException: The schema(id=[xxx]) ...异常解决办法

其实这个异常就是无法说你启动的这个servicecomb实例和注册中心的实例不匹配&#xff0c;并且信息已经被占用。 所以解决办法就是&#xff1a;启动注册中心前端界面进程&#xff0c;进入界面&#xff0c;然后kill掉你要启动的servicecomb实例在微服务注册中心的实例。然后重新…

关于Centos7启动,ens33无IP问题解决

今天启动虚拟机xshell6一直连不上&#xff0c;之前一直好好的&#xff0c;怎么突然连不上了&#xff0c;很奇怪&#xff0c;上去看看连接方式也没问题。 然后ip addr 一看ens33下无ip&#xff0c;然后就查资料解决&#xff0c;看到很多解决办法试了都没解决。 最后的解决办法…

9.获取当前时区时间和utc时间的工具方法

这是实际项目中使用到的工具方法&#xff0c;获取utc时间的使用方法和第一个类似&#xff0c;只是函数名不一样而已。 1.获取当前时区的时间 /** // 对Date的扩展&#xff0c;将 Date 转化为指定格式的String // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占…

错误:docker-ce-cli conflicts with 2:docker-1.13.1-103.git7f2769b.el7.centos.x86_64 错误:docker-ce confli

安装K8S的时候提示这个问题&#xff0c;原因就是虚拟机中已经装了docker-ce和docker-ce-client 卸载了docker然后重装k8s就好了 yum -y remove docker-ce yum -y remove docker-ce-client

POJ2398【判断点在直线哪一侧+二分查找区间】

题意&#xff1a;同POJ2318 #include<algorithm> #include<cstdio> #include<cstdlib> #include<cstring> using namespace std; struct point {int x, y; }; struct Node {point Low, High; }line[5010];int Num[5010]; int par[5010]; bool cmp(Node…

Xshell6突然连不上K8S所在的虚拟机

哎&#xff0c;最近一直出现部署运维问题&#xff0c;就很头疼&#xff0c;很影响进度。 今天早上xshell6突然就连不上虚拟机了&#xff0c;在虚拟机内部Ping百度也是没问题的。 但是xshell就是不给连&#xff0c;看xm的dhcp也在。 如果是VMnetDhcp服务关闭&#xff0c;重启…

synchronized(九)

在Java中是有常量池缓存的功能的&#xff0c;就是说如果我先声明了一个String str1 “a”; 再声明一个一样的字符串的时候&#xff0c;取值是从原地址去取的&#xff0c;也就是说是同一个对象。这也就导致了在锁字符串对象的时候&#xff0c;可以会取得意料之外的结果&#xf…

使用jQuery的ajax同步请求吃过的亏

jQuery是一个非经常常使用的js库。甚至我们开发不论什么一个项目都首先把jquery导入进行。jQuery太过强大&#xff0c;使用起来非常方便。可是在使用的过程中也遇到过非常多坑。我在这里分享一下。避免大家也遇到相同的问题束手无策&#xff0c;也方便以后回归学习。普通的写法…

Kubernetes 创建pod一直处于ContainerCreating 状态解决过程

。 遇到问题了又&#xff0c;创建的pods一直出于ContainerCreating状态。 说一下自己这次的解决流程。 首先去网上搜一搜这种类似问题的解决办法&#xff0c;然后结合自己的情况进行解决。 首先遇到的我遇到这个问题和网上一哥们的问题很相似&#xff0c;所以借鉴一下https:…

洛谷P2851 [USACO06DEC]最少的硬币The Fewest Coins(完全背包+多重背包)

题目描述 Farmer John has gone to town to buy some farm supplies. Being a very efficient man, he always pays for his goods in such a way that the smallest number of coins changes hands, i.e., the number of coins he uses to pay plus the number of coins he re…

SpringCloud项目接入华为云Paas平台CES一些注意事项

1.注册华为云账号获取个人中心-》管理我的凭证-》访问密钥-》下载ak&#xff0c;sk密钥。 2.本地项目maven需要配置华为云私服 <profile> <id>nexusProfile</id> <repositories> <repository> <id>cse1</id><url>http://mave…

@Transactional事务不生效问题解决(springboot)

springboot事务不生效的几种解决方案 最近在业务中遇到了很奇怪的场景,在加上 Transactional注解后,插入2条数据,如果第二条出异常了,第一条不会回滚,排查了很久,上网也找资料看了很久,问题得以解决,总结了事务不生效的几点可能的原因: mysql的MyISAM引擎不支持回滚,如果需要自…

springcloud不使用数据库微服务启动异常解决

项目在文件处理微服务不使用数据库时&#xff0c;项目启动异常。 解决办法如下&#xff1a;

NSAttributedStringKey

NSFontAttributeName; //字体&#xff0c;value是UIFont对象 NSParagraphStyleAttributeName;//绘图的风格&#xff08;居中&#xff0c;换行模式&#xff0c;间距等诸多风格&#xff09;&#xff0c;value是NSParagraphStyle对象 NSForegroundColorAttributeName;//文字颜色&a…