加载配置文件
- 创建 Spring Boot 项目并添加依赖
- 创建主应用程序类
- 创建代理控制器类
- 配置 application.properties 或 application.yml
- 添加 CORS 配置类
- 说明事项
- 测试
创建 Spring Boot 项目并添加依赖
- Spring Boot Starter Web
- Spring Boot DevTools(可选,用于开发时自动重启)
- Lombok(可选,用于简化代码)
创建主应用程序类
package com.sky;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
public class ProxyServerApplication {
public static void main(String[] args) {
SpringApplication.run(ProxyServerApplication.class, args);
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
创建代理控制器类
package com.sky.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
org.springframework.web.client.RestTemplate;
javax.servlet.http.HttpServletRequest;
java.util.Enumeration;
java.nio.charset.StandardCharsets;
org.springframework.util.StreamUtils;
{
String targetBaseUrl;
RestTemplate restTemplate;
{
.restTemplate = restTemplate;
}
ResponseEntity<?> proxyRequest(HttpServletRequest request) {
{
System.err.println( + request.getMethod() + + request.getRequestURI());
request.getRequestURI();
request.getQueryString();
targetBaseUrl + path + (queryString != ? + queryString : );
();
Enumeration<String> headerNames = request.getHeaderNames();
(headerNames.hasMoreElements()) {
headerNames.nextElement();
headers.add(headerName, request.getHeader(headerName));
}
;
(.equalsIgnoreCase(request.getMethod()) || .equalsIgnoreCase(request.getMethod()) || .equalsIgnoreCase(request.getMethod())) {
body = StreamUtils.copyToString(request.getInputStream(), StandardCharsets.UTF_8);
}
HttpEntity<String> entity = <>(body, headers);
HttpMethod.valueOf(request.getMethod());
ResponseEntity<String> response = restTemplate.exchange(fullUrl, method, entity, String.class);
ResponseEntity.status(response.getStatusCode()).headers(response.getHeaders()).body(response.getBody());
} (Exception e) {
System.err.println( + e.getMessage());
ResponseEntity.status().body();
}
}
}