【问题标题】:Implementing forward proxy in Java/Spring Boot在 Java/Spring Boot 中实现正向代理
【发布时间】:2017-06-17 16:12:22
【问题描述】:

我有兴趣通过使用 Java 8 和 Spring Boot 构建自己的(简单)转发代理来了解有关 HTTP 以及代理如何工作的更多信息。我读过的文章(并且有兴趣实现)是here。我感兴趣的主要三个转发代理功能是:

  • 资源缓存:如果之前访问过静态资源(CSS、JS、媒体文件等),我们可以直接从代理的本地(文件系统)缓存中获取它
  • 用户跟踪/审计:我们可以检查 HTTP 标头以查看谁在向哪些目标 URL 发出请求,并可能将这些访问记录写入日志
  • 内容过滤:URL过滤,可能检查来自目标站点的响应并防止恶意软件下载等。

这里的目标是将这个代理构建为一个 Spring Boot 应用程序,在本地运行它,然后配置一个浏览器来使用这个本地代理。最终我会将它部署到非本地环境中,但首先要做的是。

我并不真正关心这些功能的实现细节 - 我可以弄清楚如何编写/实现它们。我想知道的是:提供这些类型功能的最佳 Spring/JavaEE 构造是什么? Java EE servlet 过滤器?弹簧控制器?其他一些(可能是基于 AOP)的构造?

同样,这个想法是为了:

  1. 我将浏览器配置为访问本地代理,例如 http://localhost:8080/myproxy
  2. 在我的浏览器中,我访问了一个网站,比如http://example.com
  3. 浏览器将 HTTP 请求(针对http://example.com)传递给代理,再次在http://localhost:8080/myproxy 运行
  4. 代理(取决于所使用的构造/机制及其行为配置方式)可能会或可能不会检查/执行此请求的操作
    • 例如,如果代理配置为静态资源的缓存,它可能会检查请求以查看其请求的文档(JS 文件、CSS 文件、IMG 文件等)是否之前已缓存.如果是对缓存文档的请求,我们可以短路(完全绕过目标站点)并将响应(文件)发送回浏览器
  5. 代理将(或发出全新的 - ???)请求转发到目标站点 (http://example.com)
  6. 目标站点向代理发回 HTTP 响应
  7. 代理(取决于所使用的构造/机制及其行为配置方式)可能会或可能不会检查/执行此响应的操作
    • 例如,如果代理已配置为扫描恶意恶意软件,我们可能会检查二进制数据的响应,如果检测到,则将二进制响应发送到某个第 3 方扫描工具进行通过/失败分析等.
  8. 代理将 HTTP 响应发送回浏览器

我倾向于使用 servlet 过滤器或 Spring 控制器方法,但不确定哪种方法适合呈现这些功能。有什么想法吗?

【问题讨论】:

  • 你找到方法了吗?

标签: spring-mvc spring-boot proxy java-8 servlet-filters


【解决方案1】:

出于学习目的,您可能希望避免使用 Spring,而只需从实现一个简单的 HttpServlet 开始。从那里您将能够检查 HttpServletRequest 对象是否执行任意数量的操作,包括转发它。您可以在 servlet 本身中实现缓存逻辑,但是,添加一个 ServletFilter 以增强 servlet 的缓存行为可能是有意义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 2017-08-15
    • 2021-08-03
    相关资源
    最近更新 更多