一、实现步骤:
- 在gateway_service工程编写全局过滤器类GlobalFilter,Ordered
- 编写业务逻辑代码
- 访问接口测试,加token和不加token。
二、业务逻辑代码
package com.william.filters;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.util.MultiValueMap;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
/**
* @author :lijunxuan
* @date :Created in 2019/7/3 21:38
* @description :
* @version: 1.0
*/
@Component//注入Spring容器
public class MyGlobalFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
/**
* 目标:拦截所有请求,如果请求参数中,
* 包含token。放行,
* 如果没有,给用户提示未授权401,未授权
*/
//获取请求参数
ServerHttpRequest request = exchange.getRequest();
//获取参数
MultiValueMap<String, String> queryParams = request.getQueryParams();
//获取token值
String token = queryParams.getFirst("token");
System.out.println("token"+token);
if (token==null) {
//拦截,提示未授权错误,401
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
//拦截结束请求
return exchange.getResponse().setComplete();
}
//放行
return chain.filter(exchange);//代表放行请求
}
/**
* 当前过滤器的执行顺序:
* 数字越小,越早执行
* @return
*/
@Override
public int getOrder() {
return 0;
}
}
三、访问接口测试,加token和不加token