package com. jt ;
import java. util. List ;
import java. util. concurrent. CopyOnWriteArrayList ;
public class FilterChainTests {
public static void main ( String [ ] args) {
List < Filter > list = new CopyOnWriteArrayList < > ( ) ;
Filter filter1 = new Filter ( ) {
@Override
public boolean filter ( ) {
System . out. println ( "I am Filter false" ) ;
return true ;
}
} ;
Filter filter2 = new Filter ( ) {
@Override
public boolean filter ( ) {
System . out. println ( "I am Filter true" ) ;
return true ;
}
} ;
list. add ( filter1) ;
list. add ( filter2) ;
FilterChain filterChain = new FilterChain ( list, new Servlet ( ) {
@Override
public void dispatch ( ) {
System . out. println ( "正在分发" ) ;
}
} ) ;
filterChain. doFilter ( ) ;
}
}
class FilterChain {
private List < Filter > filters = new CopyOnWriteArrayList < > ( ) ;
private Servlet servlet;
public FilterChain ( List < Filter > filters, Servlet servlet) {
this . filters. addAll ( filters) ;
this . servlet = servlet;
}
public void doFilter ( ) {
for ( int i = 0 ; i < filters. size ( ) ; i++ ) {
if ( ! filters. get ( i) . filter ( ) ) return ;
}
servlet. dispatch ( ) ;
}
}
interface Filter {
boolean filter ( ) ;
}
interface Servlet {
void dispatch ( ) ;
}
Spring Cloud Gateway 优点: 性能强劲:是网关1.0 Zuul的1.6倍。 功能强大:内置功能如转发、监控、限流等 设计优秀,容易扩展。 缺点: 依赖Netty与WebFlux(Spring5.0),不是传统的Servlet编程模型(Spring MVC就是基于此模型实现)。 需要Spring Boot 2.0及以上的版本,才支持 使用流程: pom.xml:
< dependencies>
< dependency>
< groupId> org.springframework.cloud</ groupId>
< artifactId> spring-cloud-starter-gateway</ artifactId>
</ dependency>
</ dependencies>
server :
port : 9000
spring :
application :
name : sca- gateway
cloud :
gateway :
routes :
- id : route01
uri : http: //localhost: 8081/
predicates :
- Path=/nacos/provider/echo/**
filters :
- StripPrefix=1
server :
port : 9000
spring :
application :
name : sca- gateway
cloud :
nacos :
discovery :
server-addr : localhost: 8848
sentinel :
transport :
dashboard : localhost: 8180
port : 8719
eager : true
gateway :
discovery :
locator :
enabled : true
routes :
- id : route01
uri : lb: //sca- provider
predicates :
- Path=/nacos/provider/out/**
filters :
- StripPrefix=1