package com.nanyan.securitylink.service; import com.nanyan.securitylink.config.FailoverProperties; import com.nanyan.securitylink.config.FailoverProperties.UriConfig; import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; import org.springframework.util.AntPathMatcher; import java.util.Optional; @Service @RequiredArgsConstructor public class TokenRouteMappingService { private final FailoverProperties failoverProperties; private final AntPathMatcher pathMatcher = new AntPathMatcher(); public Optional findMatchingUriConfig(String token, String sourceUri) { Optional first = failoverProperties.getTokenMappings().stream() .filter(mapping -> mapping.getTokens().contains(token)) .flatMap(mapping -> mapping.getUriConfigs().stream()) .filter(uriConfig -> pathMatcher.match(uriConfig.getSourceUri(), sourceUri)) .findFirst(); return first; } public String resolveTargetUri(String sourceUri, UriConfig uriConfig) { if (uriConfig.getSourceUri().contains("*")) { String remaining = pathMatcher.extractPathWithinPattern( uriConfig.getSourceUri(), sourceUri); return uriConfig.getTargetUri().replace("{remaining}", remaining); } return uriConfig.getTargetUri(); } }