39 lines
1.7 KiB
Plaintext
39 lines
1.7 KiB
Plaintext
|
|
package com.securityControl.gateway.config;
|
||
|
|
import com.securityControl.common.core.utils.aes.StringHelper;
|
||
|
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||
|
|
import org.springframework.boot.autoconfigure.web.ServerProperties;
|
||
|
|
import org.springframework.context.annotation.Bean;
|
||
|
|
import org.springframework.context.annotation.Configuration;
|
||
|
|
import org.springframework.core.Ordered;
|
||
|
|
import org.springframework.core.annotation.Order;
|
||
|
|
import org.springframework.http.HttpStatus;
|
||
|
|
import org.springframework.http.server.reactive.ServerHttpRequest;
|
||
|
|
import org.springframework.web.server.ResponseStatusException;
|
||
|
|
import org.springframework.web.server.WebFilter;
|
||
|
|
|
||
|
|
@Configuration
|
||
|
|
public class ContextPathConfig {
|
||
|
|
|
||
|
|
@Bean
|
||
|
|
@ConditionalOnProperty("server.servlet.context-path")
|
||
|
|
@Order(Ordered.HIGHEST_PRECEDENCE)
|
||
|
|
public WebFilter contextPathWebFilter(ServerProperties serverProperties){
|
||
|
|
String contextPath = serverProperties.getServlet().getContextPath();
|
||
|
|
return (serverWebExchange, webFilterChain) ->{
|
||
|
|
ServerHttpRequest request = serverWebExchange.getRequest();
|
||
|
|
String requestPath = request.getURI().getPath();
|
||
|
|
|
||
|
|
if(requestPath.contains(contextPath)){
|
||
|
|
String newPath = requestPath.replaceFirst(contextPath+"/", "");
|
||
|
|
ServerHttpRequest newRequest = request.mutate()
|
||
|
|
.path(newPath).build();
|
||
|
|
return webFilterChain.filter(serverWebExchange.mutate()
|
||
|
|
.request(newRequest)
|
||
|
|
.build()
|
||
|
|
);
|
||
|
|
}else {
|
||
|
|
throw new ResponseStatusException(HttpStatus.NOT_FOUND);
|
||
|
|
}
|
||
|
|
};
|
||
|
|
}
|
||
|
|
}
|