Springboot如何实现代理服务器

 更新时间:2023年06月15日 14:42:32   作者:了佳世客  
这篇文章主要介绍了Springboot如何实现代理服务器问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Springboot实现代理服务器

Vue使用axios请求出现跨域问题,需要代理服务器。

代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,请求信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。

代理服务器不只是简单地向服务器转发请求,它还可以控制用户的行为,对接收到的客户请求进行决策,并根据过滤规则对用户请求进行过滤

我使用spring boot,想快速的实现一个用于测试的代理服务器,因此使用了HTTP-Proxy-Servlet

集成步骤:

导入依赖

<dependency>
    <groupId>org.mitre.dsmiley.httpproxy</groupId>
    <artifactId>smiley-http-proxy-servlet</artifactId>
    <version>1.6</version>
</dependency>
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>18.0</version>
</dependency>

创建bean

    @Bean
    public Servlet baiduProxyServlet(){
        return new ProxyServlet();
    }
    @Bean
    public ServletRegistrationBean proxyServletRegistration(){
        ServletRegistrationBean registrationBean = new ServletRegistrationBean(baiduProxyServlet(), "/*");
        Map<String, String> params = ImmutableMap.of(
                "targetUri", "http://www.baidu.com",//目标服务器
                "log", "true");
        registrationBean.setInitParameters(params);
        return registrationBean;
    }

设置允许跨域请求

@Configuration
public class WebMVCConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")
                .allowCredentials(true)
                .maxAge(3600)
                .allowedHeaders("*");
    }
}

设置代理服务器端口

server.port=8801

启动项目,访问http://localhost:8801/,就会访问到http://www.baidu.com

Springboot代理设置

配置文件

my:
  proxy:
    http:
      addr: 3.3.3.3
      port: 1111
    https:
      addr: 3.3.3.3
      port: 1112
  exclude:
    paths:
      - 1.1.1.1
      - 2.2.2.2

加载过滤地址

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import java.util.List;
@Data
@Configuration
@ConfigurationProperties(prefix = "my.proxy.exclude")
public class ProxyConfig {
   List<String> paths;
}

设置代理

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.stereotype.Component;
import pers.zzq.manage.config.ProxyConfig;
import java.util.List;
@Component
@Slf4j
@EnableConfigurationProperties(ProxyConfig.class)
public class ProxyInteceptorRunner implements CommandLineRunner {
   @Autowired
   ProxyConfig proxyConfig;
   @Value("${my.proxy.http.addr}")
   String httpAddr;
   @Value("${my.proxy.http.port}")
   String httpPort;
   @Value("${my.proxy.https.addr}")
   String httpsAddr;
   @Value("${my.proxy.https.port}")
   String httpsPort;
   @Override
   public void run(String... args) {
      System.setProperty("https.proxyHost", httpsAddr);
      System.setProperty("https.proxyPort", httpsPort);
      System.setProperty("http.proxyHost", httpAddr);
      System.setProperty("http.proxyPort", httpPort);
      StringBuilder sb = new StringBuilder();
      List<String> paths = proxyConfig.getPaths();
      for (String path : paths) {
         sb.append(path).append("|");
      }
      String s = sb.toString() + "localhost";
      System.setProperty("http.nonProxyHosts", s);
      System.setProperty("http.nonProxyHosts", s);
   }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java 如何将多种字符串格式 解析为Date格式

    java 如何将多种字符串格式 解析为Date格式

    这篇文章主要介绍了java 如何将多种字符串格式 解析为Date格式的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 使用Swagger实现接口版本号管理方式

    使用Swagger实现接口版本号管理方式

    这篇文章主要介绍了使用Swagger实现接口版本号管理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java SimpleDateFormat线程安全问题原理详解

    Java SimpleDateFormat线程安全问题原理详解

    这篇文章主要介绍了Java SimpleDateFormat线程安全问题原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Java中的jinfo命令使用详解

    Java中的jinfo命令使用详解

    jinfo是JDK提供的一个可以实时查看Java虚拟机各种配置参数和系统属性的命令行工具,本文给大家介绍下Java中的jinfo命令使用,感兴趣的朋友一起看看吧
    2022-03-03
  • SWT(JFace)体验之Slider,Scale

    SWT(JFace)体验之Slider,Scale

    SWT(JFace)体验之Slider,Scale实现代码。
    2009-06-06
  • springboot如何引入外部yml配置文件

    springboot如何引入外部yml配置文件

    这篇文章主要介绍了springboot如何引入外部yml配置文件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Java8方法引用和构造引用代码实例

    Java8方法引用和构造引用代码实例

    这篇文章主要介绍了java8方法引用和构造引用代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 将RestTemplate的编码格式改为UTF-8,防止乱码问题

    将RestTemplate的编码格式改为UTF-8,防止乱码问题

    这篇文章主要介绍了将RestTemplate的编码格式改为UTF-8,防止乱码问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Spring中的NamespaceHandler与BeanDefinitionParser详解

    Spring中的NamespaceHandler与BeanDefinitionParser详解

    这篇文章主要介绍了Spring中的NamespaceHandler与BeanDefinitionParser详解,由Spring启动过程之obtainFreshBeanFactory() ,可以看到NamespaceHandler、BeanDefinitionParser为解析配置文件中的Element起重要作用,那么它本身是如何被加载的呢,需要的朋友可以参考下
    2023-12-12
  • Java Arrays.sort()如何实现对int类型数组倒序排序

    Java Arrays.sort()如何实现对int类型数组倒序排序

    这篇文章主要介绍了Java Arrays.sort()如何实现对int类型数组倒序排序问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08

最新评论