解决页面重定向跳转到原有系统问题,基本路由功能完成
This commit is contained in:
parent
f68dafdff8
commit
3706152447
@ -1,8 +1,7 @@
|
|||||||
package ink.wgink.gateway.component;
|
package ink.wgink.gateway.component;
|
||||||
|
|
||||||
import ink.wgink.gateway.consts.ISystemConst;
|
|
||||||
import ink.wgink.gateway.dao.route.IRouteDao;
|
import ink.wgink.gateway.dao.route.IRouteDao;
|
||||||
import ink.wgink.gateway.filter.local.CommonFilters;
|
import ink.wgink.gateway.filter.local.CommonFiltersDefinition;
|
||||||
import ink.wgink.gateway.pojo.route.Route;
|
import ink.wgink.gateway.pojo.route.Route;
|
||||||
import ink.wgink.gateway.util.UUIDUtil;
|
import ink.wgink.gateway.util.UUIDUtil;
|
||||||
import org.springframework.cloud.gateway.filter.FilterDefinition;
|
import org.springframework.cloud.gateway.filter.FilterDefinition;
|
||||||
@ -98,13 +97,11 @@ public class MongoRouteDefinitionRepository implements RouteDefinitionRepository
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private List<FilterDefinition> listFilterDefinition(Route route) {
|
private List<FilterDefinition> listFilterDefinition(Route route) {
|
||||||
CommonFilters commonFilters = new CommonFilters();
|
CommonFiltersDefinition commonFiltersDefinition = new CommonFiltersDefinition();
|
||||||
// 定义过滤器
|
// 定义过滤器
|
||||||
List<FilterDefinition> filterDefinitions = new ArrayList<>();
|
List<FilterDefinition> filterDefinitions = new ArrayList<>();
|
||||||
// 添加重写过滤
|
// 重写响应头中的location解决重定向问题
|
||||||
filterDefinitions.add(commonFilters.rewriteFilterDefinition(route));
|
filterDefinitions.add(commonFiltersDefinition.rewriteLocationResponseHeader(route));
|
||||||
// 去除前缀
|
|
||||||
// filterDefinitions.add(commonFilters.setPathFilterDefinition(route));
|
|
||||||
return filterDefinitions;
|
return filterDefinitions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,5 +20,6 @@ public interface ISystemConst {
|
|||||||
String ADMIN_ROUTER_PREFIX = "/wg";
|
String ADMIN_ROUTER_PREFIX = "/wg";
|
||||||
String PAGE_LOGIN = "/wg/login.html";
|
String PAGE_LOGIN = "/wg/login.html";
|
||||||
String ROUTE_PREFIX = "/gw";
|
String ROUTE_PREFIX = "/gw";
|
||||||
|
String ROOT_PATH_PREFIX = "/*";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,55 +0,0 @@
|
|||||||
package ink.wgink.gateway.filter.local;
|
|
||||||
|
|
||||||
import ink.wgink.gateway.consts.ISystemConst;
|
|
||||||
import ink.wgink.gateway.pojo.route.Route;
|
|
||||||
import org.springframework.cloud.gateway.filter.FilterDefinition;
|
|
||||||
import org.springframework.cloud.gateway.filter.factory.RewritePathGatewayFilterFactory;
|
|
||||||
import org.springframework.cloud.gateway.filter.factory.SetPathGatewayFilterFactory;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* When you feel like quitting. Think about why you started
|
|
||||||
* 当你想要放弃的时候,想想当初你为何开始
|
|
||||||
*
|
|
||||||
* @ClassName: CommonFilters
|
|
||||||
* @Description: 通用过滤器
|
|
||||||
* @Author: WangGeng
|
|
||||||
* @Date: 2021/4/24 20:31
|
|
||||||
* @Version: 1.0
|
|
||||||
**/
|
|
||||||
public class CommonFilters {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 重写过滤器
|
|
||||||
*
|
|
||||||
* @param route
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public FilterDefinition rewriteFilterDefinition(Route route) {
|
|
||||||
FilterDefinition rewritePathFilterDefinition = new FilterDefinition();
|
|
||||||
Map<String, String> rewritePathFilterDefinitionMap = new HashMap<>(4);
|
|
||||||
rewritePathFilterDefinitionMap.put(RewritePathGatewayFilterFactory.REGEXP_KEY, ISystemConst.ROUTE_PREFIX + "/?(?<segment>.*)");
|
|
||||||
rewritePathFilterDefinitionMap.put(RewritePathGatewayFilterFactory.REPLACEMENT_KEY, "/$\\{segment}");
|
|
||||||
rewritePathFilterDefinition.setArgs(rewritePathFilterDefinitionMap);
|
|
||||||
rewritePathFilterDefinition.setName("RewritePath");
|
|
||||||
return rewritePathFilterDefinition;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 设置路径过滤器,去除前缀
|
|
||||||
*
|
|
||||||
* @param route
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public FilterDefinition setPathFilterDefinition(Route route) {
|
|
||||||
FilterDefinition setPathFilterDefinition = new FilterDefinition();
|
|
||||||
Map<String, String> setPathFilterDefinitionMap = new HashMap<>(2);
|
|
||||||
setPathFilterDefinitionMap.put(SetPathGatewayFilterFactory.TEMPLATE_KEY, route.getPath().replaceFirst(ISystemConst.ROUTE_PREFIX, "/"));
|
|
||||||
setPathFilterDefinition.setArgs(setPathFilterDefinitionMap);
|
|
||||||
setPathFilterDefinition.setName("SetPath");
|
|
||||||
return setPathFilterDefinition;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -0,0 +1,72 @@
|
|||||||
|
package ink.wgink.gateway.filter.local;
|
||||||
|
|
||||||
|
import ink.wgink.gateway.consts.ISystemConst;
|
||||||
|
import ink.wgink.gateway.pojo.route.Route;
|
||||||
|
import org.springframework.cloud.gateway.filter.FilterDefinition;
|
||||||
|
import org.springframework.cloud.gateway.filter.factory.RewriteLocationResponseHeaderGatewayFilterFactory;
|
||||||
|
import org.springframework.cloud.gateway.filter.factory.RewritePathGatewayFilterFactory;
|
||||||
|
import org.springframework.cloud.gateway.filter.factory.RewriteResponseHeaderGatewayFilterFactory;
|
||||||
|
import org.springframework.cloud.gateway.filter.factory.SetPathGatewayFilterFactory;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When you feel like quitting. Think about why you started
|
||||||
|
* 当你想要放弃的时候,想想当初你为何开始
|
||||||
|
*
|
||||||
|
* @ClassName: CommonFilters
|
||||||
|
* @Description: 通用过滤器
|
||||||
|
* @Author: WangGeng
|
||||||
|
* @Date: 2021/4/24 20:31
|
||||||
|
* @Version: 1.0
|
||||||
|
**/
|
||||||
|
public class CommonFiltersDefinition {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 重写过滤器,将路径中的gw删除,暂时无用
|
||||||
|
*
|
||||||
|
* @param route
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public FilterDefinition rewritePath(Route route) {
|
||||||
|
FilterDefinition rewritePath = new FilterDefinition();
|
||||||
|
Map<String, String> rewritePathMap = new HashMap<>(4);
|
||||||
|
rewritePathMap.put(RewritePathGatewayFilterFactory.REGEXP_KEY, ISystemConst.ROUTE_PREFIX + "/?(?<segment>.*)");
|
||||||
|
rewritePathMap.put(RewritePathGatewayFilterFactory.REPLACEMENT_KEY, "/$\\{segment}");
|
||||||
|
rewritePath.setArgs(rewritePathMap);
|
||||||
|
rewritePath.setName("RewritePath");
|
||||||
|
return rewritePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置路径过滤器,去除前缀,将路径中的gw删除,暂时无用
|
||||||
|
*
|
||||||
|
* @param route
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public FilterDefinition setPath(Route route) {
|
||||||
|
FilterDefinition setPath = new FilterDefinition();
|
||||||
|
Map<String, String> setPathMap = new HashMap<>(2);
|
||||||
|
setPathMap.put(SetPathGatewayFilterFactory.TEMPLATE_KEY, route.getPath().replaceFirst(ISystemConst.ROUTE_PREFIX, "/"));
|
||||||
|
setPath.setArgs(setPathMap);
|
||||||
|
setPath.setName("SetPath");
|
||||||
|
return setPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 重写响应头中的地址信息
|
||||||
|
*
|
||||||
|
* @param route
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public FilterDefinition rewriteLocationResponseHeader(Route route) {
|
||||||
|
FilterDefinition rewriteLocationResponse = new FilterDefinition();
|
||||||
|
Map<String, String> rewriteLocationResponseMap = new HashMap<>(2);
|
||||||
|
rewriteLocationResponseMap.put("stripVersionMode", RewriteLocationResponseHeaderGatewayFilterFactory.StripVersion.AS_IN_REQUEST.toString());
|
||||||
|
rewriteLocationResponseMap.put("hostValue", "Location");
|
||||||
|
rewriteLocationResponse.setName("RewriteLocationResponseHeader");
|
||||||
|
return rewriteLocationResponse;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -52,7 +52,7 @@ public class WebFluxFilter implements WebFilter {
|
|||||||
ServerHttpResponse serverHttpResponse = serverWebExchange.getResponse();
|
ServerHttpResponse serverHttpResponse = serverWebExchange.getResponse();
|
||||||
HttpHeaders headers = serverHttpResponse.getHeaders();
|
HttpHeaders headers = serverHttpResponse.getHeaders();
|
||||||
// 校验登录的路径,管理使用
|
// 校验登录的路径,管理使用
|
||||||
if(this.isUnPass(serverWebExchange)) {
|
if (this.isUnPass(serverWebExchange)) {
|
||||||
// 直接放行的路径
|
// 直接放行的路径
|
||||||
if (this.isPass(serverWebExchange)) {
|
if (this.isPass(serverWebExchange)) {
|
||||||
return webFilterChain.filter(serverWebExchange);
|
return webFilterChain.filter(serverWebExchange);
|
||||||
|
@ -1,10 +1,14 @@
|
|||||||
package ink.wgink.gateway.handler.route;
|
package ink.wgink.gateway.handler.route;
|
||||||
|
|
||||||
|
import ink.wgink.gateway.consts.ISystemConst;
|
||||||
import ink.wgink.gateway.dao.route.IRouteDao;
|
import ink.wgink.gateway.dao.route.IRouteDao;
|
||||||
|
import ink.wgink.gateway.exception.ParamsException;
|
||||||
import ink.wgink.gateway.handler.BaseHandler;
|
import ink.wgink.gateway.handler.BaseHandler;
|
||||||
import ink.wgink.gateway.pojo.result.SuccessResult;
|
import ink.wgink.gateway.pojo.result.SuccessResult;
|
||||||
import ink.wgink.gateway.pojo.route.Route;
|
import ink.wgink.gateway.pojo.route.Route;
|
||||||
|
import ink.wgink.gateway.util.RequestFieldCheckUtil;
|
||||||
import ink.wgink.gateway.util.UUIDUtil;
|
import ink.wgink.gateway.util.UUIDUtil;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.cloud.gateway.event.RefreshRoutesEvent;
|
import org.springframework.cloud.gateway.event.RefreshRoutesEvent;
|
||||||
import org.springframework.cloud.gateway.handler.predicate.PredicateDefinition;
|
import org.springframework.cloud.gateway.handler.predicate.PredicateDefinition;
|
||||||
import org.springframework.cloud.gateway.route.RouteDefinition;
|
import org.springframework.cloud.gateway.route.RouteDefinition;
|
||||||
@ -56,6 +60,10 @@ public class RouteHandler extends BaseHandler implements ApplicationEventPublish
|
|||||||
public Mono<ServerResponse> save(ServerRequest serverRequest) {
|
public Mono<ServerResponse> save(ServerRequest serverRequest) {
|
||||||
Mono<Route> routeMono = serverRequest.bodyToMono(Route.class);
|
Mono<Route> routeMono = serverRequest.bodyToMono(Route.class);
|
||||||
return routeMono.flatMap(route -> {
|
return routeMono.flatMap(route -> {
|
||||||
|
RequestFieldCheckUtil.check(route);
|
||||||
|
if (route.getPath().startsWith(ISystemConst.ROOT_PATH_PREFIX)) {
|
||||||
|
return Mono.error(new ParamsException("根路径不能配置通配符"));
|
||||||
|
}
|
||||||
setSave(route);
|
setSave(route);
|
||||||
return routeDao.save(route);
|
return routeDao.save(route);
|
||||||
}).then(ServerResponse.ok().contentType(MediaType.APPLICATION_JSON_UTF8).body(Flux.just(new SuccessResult()), SuccessResult.class));
|
}).then(ServerResponse.ok().contentType(MediaType.APPLICATION_JSON_UTF8).body(Flux.just(new SuccessResult()), SuccessResult.class));
|
||||||
@ -86,10 +94,15 @@ public class RouteHandler extends BaseHandler implements ApplicationEventPublish
|
|||||||
Mono<Route> routeMono = serverRequest.bodyToMono(Route.class);
|
Mono<Route> routeMono = serverRequest.bodyToMono(Route.class);
|
||||||
return routeDao.findById(id).flatMap(
|
return routeDao.findById(id).flatMap(
|
||||||
route -> routeMono.flatMap(r -> {
|
route -> routeMono.flatMap(r -> {
|
||||||
|
RequestFieldCheckUtil.check(r);
|
||||||
|
if (r.getPath().startsWith(ISystemConst.ROOT_PATH_PREFIX)) {
|
||||||
|
return Mono.error(new ParamsException("根路径不能配置通配符"));
|
||||||
|
}
|
||||||
route.setTitle(r.getTitle());
|
route.setTitle(r.getTitle());
|
||||||
route.setSummary(r.getSummary());
|
route.setSummary(r.getSummary());
|
||||||
route.setPath(r.getPath());
|
route.setPath(r.getPath());
|
||||||
route.setUri(r.getUri());
|
route.setUri(r.getUri());
|
||||||
|
route.setTestPath(r.getTestPath());
|
||||||
setUpdate(route);
|
setUpdate(route);
|
||||||
return routeDao.save(route);
|
return routeDao.save(route);
|
||||||
}).then(ServerResponse.ok().contentType(MediaType.APPLICATION_JSON_UTF8).body(Flux.just(new SuccessResult()), SuccessResult.class))
|
}).then(ServerResponse.ok().contentType(MediaType.APPLICATION_JSON_UTF8).body(Flux.just(new SuccessResult()), SuccessResult.class))
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package ink.wgink.gateway.pojo.route;
|
package ink.wgink.gateway.pojo.route;
|
||||||
|
|
||||||
|
import ink.wgink.gateway.annoation.CheckEmptyAnnotation;
|
||||||
import ink.wgink.gateway.dao.route.IRouteDao;
|
import ink.wgink.gateway.dao.route.IRouteDao;
|
||||||
import ink.wgink.gateway.pojo.BasePOJO;
|
import ink.wgink.gateway.pojo.BasePOJO;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@ -24,9 +25,15 @@ import java.io.Serializable;
|
|||||||
public class Route extends BasePOJO implements Serializable {
|
public class Route extends BasePOJO implements Serializable {
|
||||||
|
|
||||||
private static final long serialVersionUID = -4892456861969101733L;
|
private static final long serialVersionUID = -4892456861969101733L;
|
||||||
|
@CheckEmptyAnnotation(name = "title")
|
||||||
private String title;
|
private String title;
|
||||||
|
@CheckEmptyAnnotation(name = "说明")
|
||||||
private String summary;
|
private String summary;
|
||||||
|
@CheckEmptyAnnotation(name = "映射路径", verifyType = "path")
|
||||||
private String path;
|
private String path;
|
||||||
|
@CheckEmptyAnnotation(name = "被映射服务", verifyType = "url")
|
||||||
private String uri;
|
private String uri;
|
||||||
|
@CheckEmptyAnnotation(name = "测试接口", verifyType = "path")
|
||||||
|
private String testPath;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -36,9 +36,13 @@ public class RegexUtil {
|
|||||||
*/
|
*/
|
||||||
private static final Pattern PATTERN_EMAIL = Pattern.compile("^([a-zA-Z0-9_\\.\\-])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z0-9]{2,4})+$");
|
private static final Pattern PATTERN_EMAIL = Pattern.compile("^([a-zA-Z0-9_\\.\\-])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z0-9]{2,4})+$");
|
||||||
/**
|
/**
|
||||||
* 邮箱
|
* URL
|
||||||
*/
|
*/
|
||||||
private static final Pattern PATTERN_URL = Pattern.compile("(^#)|(^http(s*):\\/\\/[^\\s]+)");
|
private static final Pattern PATTERN_URL = Pattern.compile("(^#)|(^http(s*):\\/\\/[^\\s]+)");
|
||||||
|
/**
|
||||||
|
* 路径
|
||||||
|
*/
|
||||||
|
private static final Pattern PATTERN_PATH = Pattern.compile("\\/[^\\s]*");
|
||||||
/**
|
/**
|
||||||
* 日期格式
|
* 日期格式
|
||||||
*/
|
*/
|
||||||
@ -164,6 +168,16 @@ public class RegexUtil {
|
|||||||
return PATTERN_URL.matcher(input).matches();
|
return PATTERN_URL.matcher(input).matches();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断PATH
|
||||||
|
*
|
||||||
|
* @param input
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static boolean isPath(String input) {
|
||||||
|
return PATTERN_PATH.matcher(input).matches();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 判断日期
|
* 判断日期
|
||||||
*
|
*
|
||||||
@ -311,8 +325,4 @@ public class RegexUtil {
|
|||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
System.out.println(isHhMmSs("1111111"));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -229,6 +229,11 @@ public class RequestFieldCheckUtil {
|
|||||||
throw new ParamsException(String.format("%s格式非url格式", name));
|
throw new ParamsException(String.format("%s格式非url格式", name));
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
} else if (StringUtils.equals("path", verifyType)) {
|
||||||
|
if (!RegexUtil.isPath(value)) {
|
||||||
|
throw new ParamsException(String.format("%s格式非路径格式", name));
|
||||||
|
}
|
||||||
|
return;
|
||||||
} else if (StringUtils.equals("number", verifyType)) {
|
} else if (StringUtils.equals("number", verifyType)) {
|
||||||
if (!NumberUtils.isNumber(value)) {
|
if (!NumberUtils.isNumber(value)) {
|
||||||
throw new ParamsException(String.format("%s格式非数字格式", name));
|
throw new ParamsException(String.format("%s格式非数字格式", name));
|
||||||
|
@ -4,6 +4,10 @@ spring:
|
|||||||
cloud:
|
cloud:
|
||||||
gateway:
|
gateway:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
httpclient:
|
||||||
|
# 支持https转发
|
||||||
|
ssl:
|
||||||
|
use-insecure-trust-manager: true
|
||||||
data:
|
data:
|
||||||
mongodb:
|
mongodb:
|
||||||
uri: mongodb://127.0.0.1:27017/gateway
|
uri: mongodb://127.0.0.1:27017/gateway
|
||||||
|
@ -127,6 +127,15 @@
|
|||||||
return rowData;
|
return rowData;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{field: 'testPath', width: 200, title: '测试接口', align: 'center', sort: true,
|
||||||
|
templet: function (row) {
|
||||||
|
var rowData = row[this.field];
|
||||||
|
if (typeof (rowData) === 'undefined' || rowData == null || rowData == '') {
|
||||||
|
return '-';
|
||||||
|
}
|
||||||
|
return '<a href="'+ rowData +'" target="_blank">点击测试</a>';
|
||||||
|
}
|
||||||
|
},
|
||||||
{field: 'gmtCreate', width: 180, title: '添加时间', align: 'center', sort: true,
|
{field: 'gmtCreate', width: 180, title: '添加时间', align: 'center', sort: true,
|
||||||
templet: function (row) {
|
templet: function (row) {
|
||||||
var rowData = row[this.field];
|
var rowData = row[this.field];
|
||||||
|
@ -36,14 +36,28 @@
|
|||||||
<label class="layui-form-label">映射路径</label>
|
<label class="layui-form-label">映射路径</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input type="text" name="path" class="layui-input" lay-verify="required|path" placeholder="请输入映射路径">
|
<input type="text" name="path" class="layui-input" lay-verify="required|path" placeholder="请输入映射路径">
|
||||||
<div class="layui-form-mid layui-word-aux">直接访问网关的路径,路径中的变量用{}包含,/p2/{pq1}/{pq2}</div>
|
<div class="layui-form-mid layui-word-aux">
|
||||||
|
直接访问网关的路径<br/>
|
||||||
|
支持通配符,如:p1/**,表示p1后的人和路径都匹配;<br/>
|
||||||
|
路径中的变量用{}包含,如:/p2/{pq1}/{pq2}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label">被映射服务</label>
|
<label class="layui-form-label">被映射服务</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input type="text" name="uri" class="layui-input" lay-verify="required|uri" placeholder="请输入服务地址">
|
<input type="text" name="uri" class="layui-input" lay-verify="required|uri" placeholder="请输入服务地址">
|
||||||
<div class="layui-form-mid layui-word-aux">需要映射的服务器uri路径,如http://127.0.0.1:8080</div>
|
<div class="layui-form-mid layui-word-aux">
|
||||||
|
需要映射的服务器uri路径<br/>
|
||||||
|
如:http://127.0.0.1:8080、http://www.baidu.com、https://www.baidu.com
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">测试接口</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="text" name="testPath" class="layui-input" lay-verify="required|path" placeholder="填写测试接口地址">
|
||||||
|
<div class="layui-form-mid layui-word-aux">填写测试接口地址,如:/p1/a/b/c</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-form-item layui-layout-admin">
|
<div class="layui-form-item layui-layout-admin">
|
||||||
|
@ -36,14 +36,28 @@
|
|||||||
<label class="layui-form-label">映射路径</label>
|
<label class="layui-form-label">映射路径</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input type="text" name="path" class="layui-input" lay-verify="required|path" placeholder="请输入映射路径">
|
<input type="text" name="path" class="layui-input" lay-verify="required|path" placeholder="请输入映射路径">
|
||||||
<div class="layui-form-mid layui-word-aux">直接访问网关的路径,路径中的变量用{}包含,/p2/{pq1}/{pq2}</div>
|
<div class="layui-form-mid layui-word-aux">
|
||||||
|
直接访问网关的路径<br/>
|
||||||
|
支持通配符,如:p1/**,表示p1后的人和路径都匹配;<br/>
|
||||||
|
路径中的变量用{}包含,如:/p2/{pq1}/{pq2}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label">被映射服务</label>
|
<label class="layui-form-label">被映射服务</label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
<input type="text" name="uri" class="layui-input" lay-verify="required|uri" placeholder="请输入服务地址">
|
<input type="text" name="uri" class="layui-input" lay-verify="required|uri" placeholder="请输入服务地址">
|
||||||
<div class="layui-form-mid layui-word-aux">需要映射的服务器uri路径,如http://127.0.0.1:8080</div>
|
<div class="layui-form-mid layui-word-aux">
|
||||||
|
需要映射的服务器uri路径<br/>
|
||||||
|
如:http://127.0.0.1:8080、http://www.baidu.com、https://www.baidu.com
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">测试接口</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="text" name="testPath" class="layui-input" lay-verify="required|path" placeholder="填写测试接口地址">
|
||||||
|
<div class="layui-form-mid layui-word-aux">填写测试接口地址,如:/p1/a/b/c</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-form-item layui-layout-admin">
|
<div class="layui-form-item layui-layout-admin">
|
||||||
|
Loading…
Reference in New Issue
Block a user