1.正向代理
@Configuration
public class HttpConfig {
@Value("${test.forward-proxy.ip:'110.10.1.110'}")
String ip;
@Value("${test.forward-proxy.port:8083}")
Integer port;
@Bean(name = "thirdPartRestTemplate")
public RestTemplate thirdPartRestTemplate() {
//创建一个RestTemplate 实例
1. final RestTemplate restTemplate = new RestTemplate();
//建了一个 SimpleClientHttpRequestFactory 实例,并将其设置为 RestTemplate 的请求工厂
2. final SimpleClientHttpRequestFactory reqFactory = new SimpleClientHttpRequestFactory();
//创建一个 Proxy 实例,并传入代理类型和代理服务器的地址与端口,将其设置为 reqFactory 的代理:
3. reqFactory.setProxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(ip, port)));
2. restTemplate.setRequestFactory(reqFactory);
//设置了一个拦截器 LoggingRequestInterceptor,并将其添加到 RestTemplate 的拦截器列表中:
4. restTemplate.setInterceptors(Collections.singletonList(new LoggingRequestInterceptor()));
return restTemplate;
}
}
//======================设置日志请求拦截器类创建
@Slf4j
class LoggingRequestInterceptor implements ClientHttpRequestInterceptor {
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
logRequestDetails(request, body);
ClientHttpResponse response = execution.execute(request, body);
logResponseDetails(response);
return response;
}
private void logRequestDetails(HttpRequest request, byte[] body) {
log.info("==> Request: {} {}", request.getMethod(), request.getURI());
log.info("==> Request Headers: {}", request.getHeaders());
log.info("==> Request Body: {}", new String(body));
}
private void logResponseDetails(ClientHttpResponse response) throws IOException {
log.info("<== Response Status Code: {}", response.getStatusCode());
log.info("<== Response Headers: {}", response.getHeaders());
}
}
2.反向代理
@Configuration
public class ProxyServletConfiguration {
/**
* 读取配置文件中路由设置
*/
@Value("${proxy.servlet_url}")
private String servlet_url;
/**
* 读取配置中代理目标地址
*/
@Value("${proxy.target_url}")
private String target_url;
@Bean
public Servlet createProxyServlet() {
/** 创建新的ProxyServlet */
return new ProxyServlet();
}
@Bean
public ServletRegistrationBean proxyServletRegistration() {
ServletRegistrationBean registrationBean = new ServletRegistrationBean(createProxyServlet(), servlet_url);
//设置网址以及参数
Map<String, String> params = ImmutableMap.of("targetUri", target_url, "log", "true");
registrationBean.setInitParameters(params);
return registrationBean;
}
}
// 重新写个类,MyProxyServlet继承ProxyServlet.重新其中的 execute方法。添加相关的功能。日志,权限登录等。
@Override
protected HttpResponse (HttpServletRequest servletRequest, HttpServletResponse servletResponse,
HttpRequest proxyRequest) throws IOException { //设置header里的授权信息
proxyRequest.setHeader("Authorization", "Basic " + getWebappBLoginAuth());
HttpResponse response = super.doExecute(servletRequest, servletResponse, proxyRequest);
// 设置跨域,暂时不用。
// String origin = servletRequest.getHeader("origin");
// response.setHeader("Access-Control-Allow-Origin", origin);
// response.setHeader("Access-Control-Allow-Credentials", "true");
// response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
// response.setHeader("Access-Control-Allow-Headers",
// "Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin" +
// ",User-Agent,X-Mx-ReqToken,X-Requested-With");
return response;
}