Commit aa5f19000e1e2cdbbea16ebb99d476329294fb26
1 parent
b88f1150
路由网关禁用Demo配置后,系统仍可以通过网关路由到Demo服务。issues/I49457
Showing
4 changed files
with
42 additions
and
17 deletions
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysGatewayRouteServiceImpl.java
... | ... | @@ -17,9 +17,7 @@ import org.springframework.data.redis.core.RedisTemplate; |
17 | 17 | import org.springframework.stereotype.Service; |
18 | 18 | import org.springframework.transaction.annotation.Transactional; |
19 | 19 | |
20 | -import java.util.HashMap; | |
21 | 20 | import java.util.List; |
22 | -import java.util.Map; | |
23 | 21 | |
24 | 22 | /** |
25 | 23 | * @Description: gateway路由管理 |
... | ... | @@ -37,7 +35,7 @@ public class SysGatewayRouteServiceImpl extends ServiceImpl<SysGatewayRouteMappe |
37 | 35 | |
38 | 36 | @Override |
39 | 37 | public void addRoute2Redis(String key) { |
40 | - List<SysGatewayRoute> ls = this.list(new LambdaQueryWrapper<SysGatewayRoute>().eq(SysGatewayRoute::getStatus, 1)); | |
38 | + List<SysGatewayRoute> ls = this.list(new LambdaQueryWrapper<SysGatewayRoute>()); | |
41 | 39 | redisTemplate.opsForValue().set(key, JSON.toJSONString(ls)); |
42 | 40 | } |
43 | 41 | |
... | ... |
jeecg-boot/jeecg-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/loader/DynamicRouteLoader.java
... | ... | @@ -128,7 +128,7 @@ public class DynamicRouteLoader implements ApplicationEventPublisherAware { |
128 | 128 | * @return |
129 | 129 | */ |
130 | 130 | private void loadRoutesByRedis() { |
131 | - List<RouteDefinition> routes = Lists.newArrayList(); | |
131 | + List<MyRouteDefinition> routes = Lists.newArrayList(); | |
132 | 132 | configService = createConfigService(); |
133 | 133 | if (configService == null) { |
134 | 134 | log.warn("initConfigService fail"); |
... | ... | @@ -143,9 +143,14 @@ public class DynamicRouteLoader implements ApplicationEventPublisherAware { |
143 | 143 | e.printStackTrace(); |
144 | 144 | } |
145 | 145 | } |
146 | - for (RouteDefinition definition : routes) { | |
146 | + for (MyRouteDefinition definition : routes) { | |
147 | 147 | log.info("update route : {}", definition.toString()); |
148 | - dynamicRouteService.add(definition); | |
148 | + Integer status=definition.getStatus(); | |
149 | + if(status.equals(0)){ | |
150 | + dynamicRouteService.delete(definition.getId()); | |
151 | + }else{ | |
152 | + dynamicRouteService.add(definition); | |
153 | + } | |
149 | 154 | } |
150 | 155 | this.publisher.publishEvent(new RefreshRoutesEvent(this)); |
151 | 156 | } |
... | ... | @@ -161,12 +166,13 @@ public class DynamicRouteLoader implements ApplicationEventPublisherAware { |
161 | 166 | * @return |
162 | 167 | */ |
163 | 168 | |
164 | - public static List<RouteDefinition> getRoutesByJson(JSONArray array) throws URISyntaxException { | |
165 | - List<RouteDefinition> ls = new ArrayList<>(); | |
169 | + public static List<MyRouteDefinition> getRoutesByJson(JSONArray array) throws URISyntaxException { | |
170 | + List<MyRouteDefinition> ls = new ArrayList<>(); | |
166 | 171 | for (int i = 0; i < array.size(); i++) { |
167 | 172 | JSONObject obj = array.getJSONObject(i); |
168 | - RouteDefinition route = new RouteDefinition(); | |
173 | + MyRouteDefinition route = new MyRouteDefinition(); | |
169 | 174 | route.setId(obj.getString("routerId")); |
175 | + route.setStatus(obj.getInteger("status")); | |
170 | 176 | Object uri = obj.get("uri"); |
171 | 177 | if (uri == null) { |
172 | 178 | route.setUri(new URI("lb://" + obj.getString("name"))); |
... | ... |
jeecg-boot/jeecg-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/loader/DynamicRouteService.java
... | ... | @@ -47,14 +47,13 @@ public class DynamicRouteService implements ApplicationEventPublisherAware { |
47 | 47 | * @param id |
48 | 48 | * @return |
49 | 49 | */ |
50 | - public synchronized Mono<ResponseEntity<Object>> delete(String id) { | |
51 | - return this.repository.delete(Mono.just(id)).then(Mono.defer(() -> { | |
52 | - return Mono.just(ResponseEntity.ok().build()); | |
53 | - })).onErrorResume((t) -> { | |
54 | - return t instanceof NotFoundException; | |
55 | - }, (t) -> { | |
56 | - return Mono.just(ResponseEntity.notFound().build()); | |
57 | - }); | |
50 | + public synchronized void delete(String id) { | |
51 | + try { | |
52 | + repository.delete(Mono.just(id)).subscribe(); | |
53 | + this.publisher.publishEvent(new RefreshRoutesEvent(this)); | |
54 | + }catch (Exception e){ | |
55 | + e.printStackTrace(); | |
56 | + } | |
58 | 57 | } |
59 | 58 | |
60 | 59 | /** |
... | ... |
jeecg-boot/jeecg-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/loader/MyRouteDefinition.java
0 → 100644
1 | +package org.jeecg.loader; | |
2 | + | |
3 | +import org.springframework.cloud.gateway.route.RouteDefinition; | |
4 | + | |
5 | +/** | |
6 | + * 自定义RouteDefinition | |
7 | + * @author zyf | |
8 | + */ | |
9 | +public class MyRouteDefinition extends RouteDefinition { | |
10 | + /** | |
11 | + * 路由状态 | |
12 | + */ | |
13 | + private Integer status; | |
14 | + | |
15 | + public Integer getStatus() { | |
16 | + return status; | |
17 | + } | |
18 | + | |
19 | + public void setStatus(Integer status) { | |
20 | + this.status = status; | |
21 | + } | |
22 | +} | |
... | ... |