java 正向代理+反向代理

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值