自研网关系统已开源,求star 项目地址:
现在网关已经具备转发的功能,但有些场景还是不满足
特殊URL处理
特殊URL编辑
接口测试 主要代码实现如下:
@Slf4j
public class GatewaySpecUrlWebFilter implements WebFilter {
@Autowired
private IProjectSpecUrlService projectSpecUrlService;
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
String projectCode = RequestHelper.getRequestProjectCode(exchange.getRequest());
Assert.hasText(projectCode, "工程编码不存在");
//特殊URL处理;
if (this.handleSpecUrls(exchange, projectCode)) {
return chain.filter(exchange.mutate().request(exchange.getRequest().mutate().path("/redirect").build()).build());
}
return chain.filter(exchange);
}
@SneakyThrows
private boolean handleSpecUrls(ServerWebExchange exchange, String projectCode) {
List<ProjectSpecUrlDto> specUrlDtos = projectSpecUrlService.findSpecUrlListByProjectCode(projectCode);
for (ProjectSpecUrlDto projectSpecUrlDto : specUrlDtos) {
if (this.handleSpecUrl(projectSpecUrlDto, exchange, projectCode)) {
return true;
}
}
return false;
}
@SneakyThrows
private boolean handleSpecUrl(ProjectSpecUrlDto projectSpecUrlDto, ServerWebExchange exchange, String projectCode) {
boolean isMatch = RequestHelper.isMatchUrl(projectSpecUrlDto.getAccessUrl(), exchange.getRequest().getURI().getPath(), projectCode);
if (isMatch) {
//URL匹配
if (projectSpecUrlDto.getOperation() == 0) {
// chain.filter(exchange.mutate().response(ServerResponse.temporaryRedirect(URI.create(projectSpecUrlDto.getRedirectUrl())).build()).request(exchange.getRequest()).build());
// chain.filter(exchange.mutate().request(exchange.getRequest().mutate().uri(new URI(projectSpecUrlDto.getRedirectUrl())).build()).build());
exchange.getAttributes().put("gateway_spec_url_redirect_url",projectSpecUrlDto.getRedirectUrl());
return true;
} else if (projectSpecUrlDto.getOperation() == 1) {
throw new CustomException(projectSpecUrlDto.getErrorMsg());
} else if (projectSpecUrlDto.getOperation() == 2) {
throw new BaseException(SystemErrorType.SPEC_URL_ERROR_ACCESS);
}
}
return false;
}
}
主要是通过过滤器对特殊的URL进行拦截,根据不同的情况来做判断,做跳转或异常抛出 具体代码大家可以去我的开源项目中看,欢迎提ISSUE及需求。 因为只有一个人,也欢迎大家参与进来.
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有