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模拟栈的实现以及Stack类的介绍

    详解Java模拟栈的实现以及Stack类的介绍

    栈是一种数据结构,它按照后进先出的原则来存储和访问数据。Stack是一个类,表示栈数据结构的实现。本文就来和大家介绍一下Java模拟栈的实现以及Stack类的使用,需要的可以参考一下
    2023-04-04
  • java多种幻灯片切换特效(经典)

    java多种幻灯片切换特效(经典)

    功能说明: 代码实现了多种幻灯片变换特效. 如:淡入淡出、缓慢覆盖、旋转覆盖等10多种变换效果。
    2013-03-03
  • java实现简单学生管理系统项目

    java实现简单学生管理系统项目

    这篇文章主要介绍了java实现简单学生管理系统项目,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • Java中的泛型和泛型通配符详解

    Java中的泛型和泛型通配符详解

    这篇文章主要介绍了Java中的泛型和泛型通配符详解,泛型的作用就是在编译的时候能够检查类型安全,并且所有的强制转换都是自动和隐式的在没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,需要的朋友可以参考下
    2023-07-07
  • 一文了解jJava中的加密与安全

    一文了解jJava中的加密与安全

    常见的编码有ASCII码、Unicode编码。最简单的编码是直接给每个字符指定一个若干字节表示的整数,复杂一点的编码就需要根据已有的编码推算出来。本文将为大家详细讲讲Java重点加密与安全,感兴趣的可以了解一下
    2022-07-07
  • Linux部署springboot项目彩色日志打印方式

    Linux部署springboot项目彩色日志打印方式

    这篇文章主要介绍了Linux部署springboot项目彩色日志打印方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Java线程阻塞工具LockSupport用法详解

    Java线程阻塞工具LockSupport用法详解

    Java中的LockSupport是一个用于线程同步的工具类,它提供了一种基于线程的阻塞和唤醒机制,LockSupport可以让线程在特定条件下阻塞挂起,等待其他线程发送信号来唤醒它,本文将通过一个小案例给大家介绍一下LockSupport怎么用,让你永远记住它
    2023-08-08
  • Java Base64算法实际应用之邮件发送实例分析

    Java Base64算法实际应用之邮件发送实例分析

    这篇文章主要介绍了Java Base64算法实际应用之邮件发送,结合实例形式分析了java字符编码与邮件发送相关操作技巧,需要的朋友可以参考下
    2019-09-09
  • MyBatis typeHandler接口的定义和使用

    MyBatis typeHandler接口的定义和使用

    TypeHandler被称作类型处理器,MyBatis在设置预处理语句中的参数或从结果集中取出一个值时,都会用类型处理器将Java对象转化为数据库支持的类型或者将获取到数据库值以合适的方式转换成Java类型,感兴趣的同学可以参考下文
    2023-05-05
  • Java方法递归调用实例解析

    Java方法递归调用实例解析

    这篇文章主要介绍了Java方法递归调用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02

最新评论