gateway请求拦截_一种网关对用户请求进行统一拦截判断是否放行的方法与流程...

aed7c30a6e2dc44d9831746bc168a865.gif

本发明涉及互联网技术领域,特别涉及一种网关对用户请求进行统一拦截判断是否放行的方法。

背景技术:

随着互联网发展的越来越快,技术也更新的非常频繁,比如开发一个系统的架构由最初始的单个服务器就能处理演变到现在的利用springcloud技术实现的微服务,随着业务的越来越复杂,结构也变得越来越复杂。

技术实现要素:

本发明的目的旨在至少解决所述技术缺陷之一。

为此,本发明的目的在于提出一种网关对用户请求进行统一拦截判断是否放行的方法。

为了实现上述目的,本发明的实施例提供一种网关对用户请求进行统一拦截判断是否放行的方法,包括如下步骤:

步骤s1,当接收到用户的服务请求时,对用户进行登陆是否有效以及该服务请求是否合法进行拦截判断;

步骤s2,根据预先设置的所有url地址和过滤器应忽略的url地址进行判断;

步骤s3,判断url地址是否为有效地址,并判断用户令牌token是否有效;

步骤s4,如果用户不具备该地址访问权限,则过滤返回;如果通过,则对该服务请求进行相关用户信息的请求头的添加。

进一步,在所述步骤s3中,所述判断地址和用户token是否有效,包括:

注册匹配器读取配置文件来获取需要忽略的地址请求,通过注册匹配来判断该服务请求url地址是否属于网关要忽略的地址请求,如果是则进行放行;否则继续进行判断,获取请求头中的token信息,通过token信息从redis数据库中获取用户信息;如果返回异常或者返回的用户信息为空,则请求识别,表示该token信息失效,将错误信息返回到客户端;如果返回的用户信息有效,则将用户信息放到请求的属性attributes中,放行该过滤器。

进一步,判断该服务请求url地址是否属于网关要忽略的地址请求,包括:通过配置文件中的path.skip属性将需要忽略过滤的地址放进忽略权限匹配校验器中,然后对访问的地址进行比较,如果访问地址属于忽略过滤地址,那么进行放行,不再进行token的校验。

进一步,所述判断用户是否具有该url的访问权限,包括:

首先判断该服务请求是否进行直接放行,如果不属于则忽略url地址,判断url地址是否属于合法或者存在url地址;如果不存在则返回资源无法找到信息,将具有的url地址由注册匹配器来获得所拥有的所有合法的url地址,如果请求的url地址存在,则根据api字段id和用户的角色进行调用来判断用户是否具有该url权限的方法,并返回结果,通过结果判断是否需要放行;如果结果中api字段不为空,则将api字段放进请求的属性attributes中。

进一步,从请求中获取前两个过滤器中保存的属性attributes,并通过url编码后保存到请求头中,然后将请求放行,请求到达指定的服务进行相应的处理。

进一步,添加上下文信息,对信息进行url编码,再一次对请求进行过滤,对前两次过滤中的请求头的信息再一次处理,将信息转化为json格式并对用户信息进行url编码,然后进行放行到对应的请求服务中去。

根据本发明实施例的网关对用户请求进行统一拦截判断是否放行的方法,基于springcloudgateway网关过滤器的管理技术,结合redis,mysql数据库,用于用户对服务发出请求时对用户进行登陆是否有效并且请求是否合法的拦截判断,根据预先设置的所有url地址,和过滤器应该忽略的url地址进行判断,判断地址是否为有效地址,判断用户token是否有效,然后如果用户不具备该地址访问的权限,则过滤返回,如果通过,则对请求进行一些有关用户信息的请求头的添加,从而对业务进行请求,一些用户相关的信息可以从请求头中获取。本发明解决了用户登陆失效判断以及url请求无效问题,确保发送到微服务的请求都是有效的。本发明采用网关对用户的请求进行统一的拦截并进行url以及用户登陆是否有效等一系列的判断来决定是否将请求发送到指定的微服务中去,并根据请求路径路由到不同的微服务,保证尽量的简化开发。

本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。

附图说明

本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:

图1为根据本发明实施例的网关对用户请求进行统一拦截判断是否放行的方法的流程图;

图2为根据本发明实施例的网关对用户请求进行统一拦截判断是否放行的方法的示意图。

具体实施方式

下面详细描述本发明的实施例,实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。

本发明提出一种网关对用户请求进行统一拦截判断是否放行的方法,通过判断地址有效性和token有效性、判断用户是否具有该url的访问权限、添加上下文信息,对信息进行url编码,可以保证其它服务收到的请求为安全合法的,以及对添加的请求头数据进行url编码。

如图1和图2所示,本发明实施例的网关对用户请求进行统一拦截判断是否放行的方法,包括如下步骤:

步骤s1,当接收到用户的服务请求时,对用户进行登陆是否有效以及该服务请求是否合法进行拦截判断。

步骤s2,根据预先设置的所有url地址和过滤器应忽略的url地址进行判断。

步骤s3,判断url地址是否为有效地址,并判断用户令牌token是否有效。

具体的,判断地址和用户token是否有效,包括:

注册匹配器读取配置文件来获取需要忽略的地址请求,通过注册匹配来判断该服务请求url地址是否属于网关要忽略的地址请求,如果是则进行放行;否则继续进行判断,获取请求头中的token信息,通过token信息从redis数据库中获取用户信息;如果返回异常或者返回的用户信息为空,则请求识别,表示该token信息失效,将错误信息返回到客户端;如果返回的用户信息有效,则将用户信息放到请求request的属性attributes中,放行该过滤器。

在本发明的实施例中,判断该服务请求url地址是否属于网关要忽略的地址请求,包括:通过配置文件中的path.skip属性将需要忽略过滤的地址放进忽略权限匹配校验器中,然后对访问的地址进行比较,如果访问地址属于忽略过滤地址,那么进行放行,不再进行token的校验。

步骤s4,如果用户不具备该地址访问权限,则过滤返回;如果通过,则对该服务请求进行相关用户信息的请求头的添加。

在本步骤中,判断用户是否具有该url地址的访问权限,包括如下步骤:

首先判断该服务请求是否进行直接放行,判断此次过滤是否需要放行忽略地址,如果不属于则忽略url地址,用url匹配校验器判断请求的url地址是否属于合法或者存在url地址(匹配校验器通过mysql数据库中的api表将系统api注册进匹配校验器中,如果url匹配不成功,那么返回资源找不到);如果不存在则返回资源无法找到信息,然后从请求头中找到current-context(由第一个过滤器通过token从redis中找到用户信息保存到该请求头中),获取对应的值就是用户信息,从用户信息中得到所拥有的角色,然后利用urlapi匹配工具获取到该路径所对应的apiid,然后根据id和用户角色想对应的资源校验服务发起请求,通过匹配数据库中role_api表,api_column表得到api字段结果,如果失败,说明该用户不具备该url的访问权限,如果成功,那么将用户具有的api字段信息权限放入到columnids请求头中,进行放行。

将具有的url地址由注册匹配器来获得所拥有的所有合法的url地址,如果请求的url地址存在,则根据api字段id和用户的角色进行调用来判断用户是否具有该url权限的方法,并返回结果,通过结果判断是否需要放行;如果结果中api字段不为空,则将api字段放进请求的属性attributes中。

在本步骤中,从request请求中获取前两个过滤器中保存的属性attributes,并通过url编码后保存到请求头中,然后将请求放行,请求到达指定的服务进行相应的处理。

添加上下文信息,对信息进行url编码,再一次对请求进行过滤,对前两次过滤中的请求头的信息再一次处理,将信息转化为json格式并对用户信息进行url编码,然后进行放行到对应的请求服务中去,返回请求结果。

根据本发明实施例的网关对用户请求进行统一拦截判断是否放行的方法,基于springcloudgateway网关过滤器的管理技术,结合redis,mysql数据库,用于用户对服务发出请求时对用户进行登陆是否有效并且请求是否合法的拦截判断,根据预先设置的所有url地址,和过滤器应该忽略的url地址进行判断,判断地址是否为有效地址,判断用户token是否有效,然后如果用户不具备该地址访问的权限,则过滤返回,如果通过,则对请求进行一些有关用户信息的请求头的添加,从而对业务进行请求,一些用户相关的信息可以从请求头中获取。本发明解决了用户登陆失效判断以及url请求无效问题,确保发送到微服务的请求都是有效的。本发明采用网关对用户的请求进行统一的拦截并进行url以及用户登陆是否有效等一系列的判断来决定是否将请求发送到指定的微服务中去,并根据请求路径路由到不同的微服务,保证尽量的简化开发。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。

尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在不脱离本发明的原理和宗旨的情况下在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。本发明的范围由所附权利要求及其等同限定。

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

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

相关文章

git修改/添加/删除远程仓库

git修改/添加/删除远程仓库

基础——ASP.NET页面的生命周期

页请求:页请求发生在页生命周期开始之前。当用户请求一个页面,ASP.NET将确定是否需要分析或者编译该页面,或者是否可以在不运行页的情况下直接请求缓存响应客户端。 开始:发生请求后,页面就进入了初始化阶段。在该阶段…

主函数 main WinMain _tmain _tWinMain 的区别

From: http://blog.csdn.net/zhangxinrun/article/details/5781451 main是C/C的标准入口函数名 WinMain是windows API窗体程序的入口函数。(int WINAPI WinMain()) 中 WINAPI是__stdcall宏,在windef.h中定义的。 _tmain _tWinMain 是Unicode版本函数别名&#xff0c…

selenium之HTMLTestRunner练习

最近工作不忙,开始学习python&selenium,有很多理解模糊的地方,做下记录,希望大神可以指导。 练习1: 小插曲1:执行代码以后,发现baidu.html空的,执行多次发现原因,必须…

spark sql 上个月_Spark学习之路 (十八)SparkSQL简单使用

一、SparkSQL的进化之路1.0以前:Shark1.1.x开始:SparkSQL(只是测试性的) SQL1.3.x:SparkSQL(正式版本)Dataframe1.5.x:SparkSQL 钨丝计划1.6.x:SparkSQLDataFrameDataSet(测试版本)x:SparkSQLDataFrameDataSet(正式版本)SparkSQL:还有其他的…

Mac 生成SSH Key并配置到GitLab(单个)

Mac 生成SSH Key并配置到GitLab(单个)

一封写给自己的信

亲爱的自己,从今天起为了自己骄傲的活着吧,好好爱自己,没有人会心疼你,除了你妈妈。亲爱的自己,不要太在意一些人太在乎一些事,顺其自然以最佳心态面对,因为这世界就是这么不公平,往…

GetClientRect相当于GetWindowRect和ScreenToClient区别

From: http://www.cnblogs.com/yongtaiyu/archive/2011/05/18/2049554.html GetWindowRect是取得窗口在屏幕坐标系下的RECT坐标(包括客户区和非客户区),这样可以得到窗口的大小和相对屏幕左上角(0,0)的位置。 GetClientRect取得窗口客户区(…

汇编中call printf参数压栈时错误理解

EAX, ECX,EDX,EBX均可以32bit,16bit,8bit访问&#xff0c;如下所示: <-------------------EAX------------------------>|<----------------------|-----------|----------->|             |<---------AX--------->|             |&…

ajax传输json数据格式乱码_解决Ajax加载JSon数据中文乱码问题

一、问题描述使用zTree的异步刷新父级菜单时&#xff0c;服务器返回中文乱码&#xff0c;但项目中使用了SpringMvc&#xff0c;已经对中文乱码处理&#xff0c;为什么还会出现呢&#xff1f;此处为的异步请求的配置&#xff1a;Java代码async: {enable: true,url: basePath /s…

在命令提示符下输入的命令

ASSOC 显示或修改文件扩展名关联。ATTRIB 显示或更改文件属性。BREAK 设置或清除扩展式 CTRLC 检查。BOOTCFG 设置 boot.ini 文件的属性以便控制启动加载。CACLS 显示或修改文件的访问控制列表(ACL)。CALL 从另一个批处理…

(转载)WebSphere MQ安装过程

参考文档&#xff1a; http://www.ibm.com/developerworks/cn/linux/linux-speed-start/l-ss-mq/ 转载于:https://www.cnblogs.com/lichmama/p/4312577.html

Vue.config.productionTip = false 是什麽意思

Vue.config.productionTip false 是什麽意思

non-aggregates cannot be initialized with initializer list

From: http://blog.csdn.net/sp_daiyq/article/details/7008990 我定义了一个结构体&#xff0c;示意如下&#xff1a; [cpp] view plaincopyStruct A { int x; CString test; }; 然后我定义一个变量同时对其进行串行初始化&#xff1a; A a {0, "hello&q…

xxljob 配置具体定时任务_记一次xxl-job定时任务没有触发的问题

当初选了xxl-job就是因为它的触发机制比较靠谱,到点准时发,而且有日志可以看。 昨天突然发现部署在一台本地机器上的xxl-job到点并没有触发,且没有任何日志。通过管理页面查询触发日志,发现日志还是有的,只是和筛选条件不甚匹配。比如选取了昨天的日志,结果集中包含了今天…

TOMCAT启动完成但是ECLIPSE仍然显示starting....

最近重新部署了一个TOMCAT服务&#xff0c;但是启动碰到个问题&#xff0c;虽然TOMCAT控制台已显示启动成功&#xff0c;但是ECLIPSE右下角仍然一直显示STARTING&#xff0c;最后TOMCAT超时&#xff0c;启动失败。之前以为是拷贝工程的问题&#xff0c;但其实是SERVER配置的问题…