Soul 게이트웨이(18)----context-path-mapping 플러그인 및 sign 플러그인
13134 단어 Soul게이트웨이 소스 코드
context-path-mapping 플러그인
context-path-mapping
플러그인은 URI 요청 재작성에 사용사용
soul-bootstrap
의pom.xml 파일에 지원context_path
이 추가되었습니다. <dependency>
<groupId>org.dromaragroupId>
<artifactId>soul-spring-boot-starter-plugin-context-pathartifactId>
<version>${project.version}version>
dependency>
soul-admin
– > 플러그 인 관리 – > context_path
에서 켜기로 설정합니다.재작성 선택기와 규칙을 설정합니다.키 소스
protected Mono<Void> doExecute(final ServerWebExchange exchange, final SoulPluginChain chain, final SelectorData selector, final RuleData rule) {
//
final SoulContext soulContext = exchange.getAttribute(Constants.CONTEXT);
assert soulContext != null;
final String handle = rule.getHandle();
//
final ContextMappingHandle contextMappingHandle = GsonUtils.getInstance().fromJson(handle, ContextMappingHandle.class);
if (Objects.isNull(contextMappingHandle) || StringUtils.isBlank(contextMappingHandle.getContextPath())) {
log.error("context path mapping rule configuration is null :{}", rule);
return chain.execute(exchange);
}
//
if (!soulContext.getPath().startsWith(contextMappingHandle.getContextPath())) {
//
Object error = SoulResultWrap.error(SoulResultEnum.CONTEXT_PATH_ERROR.getCode(), SoulResultEnum.CONTEXT_PATH_ERROR.getMsg(), null);
return WebFluxResultUtils.result(exchange, error);
}
// URI,
this.buildContextPath(soulContext, contextMappingHandle);
//
return chain.execute(exchange);
}
sign 플러그인
sign
플러그인은 요청에 대한 서명 인증에 사용사용
soul-bootstrap
의pom.xml 파일에 의존 추가 <dependency>
<groupId>org.dromaragroupId>
<artifactId>soul-spring-boot-starter-plugin-signartifactId>
<version>${project.version}version>
dependency>
soul-admin
-> 플러그 인 관리에서 -> sign
플러그 인이 켜져 있습니다.선택기 및 규칙 구성protected Mono<Void> doExecute(final ServerWebExchange exchange, final SoulPluginChain chain, final SelectorData selector, final RuleData rule) {
//
Pair<Boolean, String> result = signService.signVerify(exchange);
if (!result.getLeft()) {
//
Object error = SoulResultWrap.error(SoulResultEnum.SIGN_IS_NOT_PASS.getCode(), result.getRight(), null);
return WebFluxResultUtils.result(exchange, error);
}
//
return chain.execute(exchange);
}