一、实现步骤:
- 在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 {@Overridepublic 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) {//拦截,提示未授权错误,401exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);//拦截结束请求return exchange.getResponse().setComplete();}//放行return chain.filter(exchange);//代表放行请求}/*** 当前过滤器的执行顺序:* 数字越小,越早执行* @return*/@Overridepublic int getOrder() {return 0;}
}
三、访问接口测试,加token和不加token