开发者学堂课程【全面讲解 Spring Cloud Alibaba 技术栈(知识精讲+项目实战)第三阶段:Gateway 全局过滤器】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/685/detail/11894
Gateway 全局过滤器
内容介绍:
一、 全局过滤器
二、内置全局过滤器
三、自定义全局过滤器
一、 全局过滤器
全局过滤器作用于所有路由,无需配置。通过全局过滤器可以实现对全县的统一校验,安全性验证等功能。
二、内置全局过滤器
SpringCloud Gateway 内部也是通过一系列的内置全局过滤器对整个路由转发进行如下处理:
三、自定义全局过滤器
内置的过滤器已经可以完成大部分的功能,但是对于企业开发的一些业务功能处理,还是需要我们自己编写过滤器来实现的,那么我们一起通过代码的形式自定义一个过滤器,去完成统一的权限校验。
开发中的鉴权逻辑:
·当客户端第一次请求服务时,服务端对用户进行信息认证(登录)
·认证通过,将用户信息进行加密形成 token,返回给客户端,作为登录凭证
·以后每次请求,客户端都携带认证的 token
·服务端对 token 进行解密,判断是否有效。
如上图,对于验证用户是否已经登录鉴权的过程可以在网关统一检验。
检验的标准就是请求中是否携带 token 凭证以及 token 的正确性。
下面的我们自定义一个 GlobalFilter,去校验所有请求的请求参数中是否包含"token”,如何不包含请求参数“token”则不转发路由,否则执行正常的逻辑。
编辑一个名称为 AuthGlobalFilter 的逻辑代码
//自定义的全局过滤器(作用是 统—鉴权)
//要求:必须实现GlobalFilter,ordered并且实现里面的两个方法
@Slf4j
@component
public class AuthGlobalFilter implements GlobalFilter,
ordered {
//过滤器逻辑
@Override
public Mono filter(ServerWebExchange exchange,GatewayFilterchain chain) {
//统─鉴权逻辑
String token = exchange. getRequest () .getQueryParams
() .getFirst ( k: "token");
if( !stringUtils.equals ( "adnin" , token)) {
//认证失败
log.info ("认证失败了...." );
exchange.getResponse().setstatuscode(Httpstatus.UNAUTHORIZED);
return exchange.getResponse ( ) .setComplete();
}
//放行
return chain.filter (exchange) ;
接下来启动代码验证一下,显示如下
因为我们设置的 unauthorized 的值就是401
当我们在访问的网址 localhost:7000/product-serv/profuct/1后加上?token=admin 页面显示的是
如果传输数据不对时,页面还是
通过鉴权讲的是自定义全局过滤器编写的步骤和逻辑代码