前言
主要是為網關做一個可以動態(tài)增加塌衰,刪除白名單的功能黍图,以達到可以直接修改 URL 就可以做過濾那伐,而不必修改本機白名單文件再重啟項目跃惫。由于1.x 和 2.x 關于刷新那塊不一致靶庙,說明下環(huán)境:
- Spring Boot 2.0.3.RELEASE
- Spring Cloud Finchley. RELEASE
- Spring Cloud Config
- Spring Cloud Bus
- RabbitMQ
Config Server配置
除了配置一個簡單的Config Server问畅,還要額外加入bus 和 actuator 依賴。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
部分相關配置
spring:
cloud:
config:
server:
git:
uri:
search-paths: config-repo
username:
password:
bus:
trace:
enabled: true # 跟蹤總線事件
rabbitmq:
host: 127.0.0.1
port: 5672
username: test
password: 123456
endpoints:
default:
web:
enabled: true
management:
endpoints:
web:
exposure:
include: "*"
網關端配置
網關這里作為Config-Server的一個Client連接六荒,不過還是通過注冊中心連接护姆。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
部分相關配置
spring:
cloud:
config:
profile: dev
label: master
fail-fast: true
name: gateway-config
discovery:
enabled: true
# config-server's application name
service-id: config-server
rabbitmq:
host: 127.0.0.1
port: 5672
username: test
password: 123456
zuul:
#ignored-services: consul
retryable: true
endpoints:
default:
web:
enabled: true
management:
endpoints:
web:
exposure:
include: bus-refresh
@Component
@RefreshScope
public class WhiteListPool {
@Value("${white.list}")
public Set<String> value;
public Set<String> getValue() {
System.out.println(value.toString());
return value;
}
}
@Slf4j
public class SimpleFilter extends ZuulFilter {
@Autowired
private WhiteListPool pool;
@Override
public String filterType() {
return "pre";
}
@Override
public int filterOrder() {
return 1;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
...
}
public boolean isWhiteList(String url){
return pool.getValue().stream().anyMatch(url::contains);
}
}
active
- 改變配置倉庫中的配置文件
- 觸發(fā)config-server的刷新通知
http://localhost:5555/actuator/bus-refresh
2.0之前http://localhost:5555/bus/refresh - 跟蹤總線事件
http://localhost:5555/actuator/httptrace
2.0之前http://localhost:5555/trace - 訪問網關已會驗證最新白名單