Soul 게이트웨이(18)----context-path-mapping 플러그인 및 sign 플러그인

context-path-mapping 플러그인과sign 플러그인
  • context-path-mapping 플러그인
  • 사용
  • 주요 소스
  • sign 플러그인
  • 사용
  • 원본 분석


  • 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);
    }
    

    좋은 웹페이지 즐겨찾기