网关登录校验
网关过滤器种类
自定义过滤器
自定义过滤器文件目录
GatewayFilter自定义过滤器
1、导入依赖
<!--网管依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--nacos服务注册发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--loadbalancer负载均衡器-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
2、创建filter
package com.hmall.gateway.filters;
import lombok.Data;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.util.List;
@Component
public class PrintAnyGatewayFilterFactory extends AbstractGatewayFilterFactory<PrintAnyGatewayFilterFactory.Config> {
@Override
public GatewayFilter apply(Config config) {
return new GatewayFilter() {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
System.out.println("PrintAnyGatewayFilterFactory 过滤:" + exchange.getRequest().getLocalAddress());
System.out.println("a:"+config.getC());
return chain.filter(exchange);
}
};
}
// 自定义配置属性,成员变量名称很重要,下面会用到
// TODO 注意static
@Data
public static class Config{
private String a;
private String b;
private String c;
}
// 将变量名称依次返回,顺序很重要,将来读取参数时需要按顺序获取
@Override
public List<String>shortcutFieldOrder(){
return List.of("a","b","c");
}
// 返回当前配置类的类型,也就是内部的Config
@Override
public Class<Config>getConfigClass(){
return Config.class;
}
}
3、配置yaml文件
server:
port: 10086
spring:
application:
name: hm-gateway
profiles:
active: dev
cloud:
nacos:
server-addr: 114.116.45.207:8848
gateway:
routes:
- id: item-service
uri: lb://item-service
predicates:
- Path=/items/**,/search/**
filters:
- AddRequestHeader=truth, weiwei
- Custom= WOW, true, true
- PrintAny= aa, bb, cc
GlobalFilter自定义过滤器
filter代码
package com.hmall.gateway.filters;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
@Component
public class PrintAnyGlobalFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
System.out.println("全局过滤器执行。。。");
return chain.filter(exchange);
}
// 标记权重、权重越小越优先
@Override
public int getOrder() {
return 0;
}
}