Gateway⾃定义全局过滤器
全局过滤器的作⽤也是处理⼀切进⼊⽹关的请求和微服务响应,与GatewayFilter的作⽤⼀样。区别在于GatewayFilter通过配置定义,处理逻辑是固定的;⽽GlobalFilter的逻辑需要⾃⼰写代码实现。
定义⽅式是实现GlobalFilter接⼝。
public interface GlobalFilter {
/**
* 处理当前请求,有必要的话通过{@link GatewayFilterChain}将请求交给下⼀个过滤器处理
*
* @param exchange 请求上下⽂,⾥⾯可以获取Request、Response等信息
* @param chain ⽤来把请求委托给下⼀个过滤器
* @return {@code Mono<Void>} 返回标⽰当前过滤器业务结束
*/
Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain);
}
在filter中编写⾃定义逻辑,可以实现下列功能:
登录状态判断
权限校验
请求限流等
⾃定义全局过滤器
需求:定义全局过滤器,拦截请求,判断请求的参数是否满⾜下⾯条件:
参数中是否有authorization,
authorization参数值是否为admin
如果同时满⾜则放⾏,否则拦截
实现:
在gateway中定义⼀个过滤器:
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
publisher.Mono;
@Order(-1)
@Component
public class AuthorizeFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 1.获取请求参数
MultiValueMap<String, String> params = Request().getQueryParams();
// 2.获取authorization参数
String auth = First("authorization");
// 3.校验
微服务网关作用if ("admin".equals(auth)) {
// 放⾏
return chain.filter(exchange);
}
// 4.拦截
// 4.1.禁⽌访问,设置状态码
// 4.2.结束处理
Response().setComplete();
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论