【发布时间】: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)的构造?
同样,这个想法是为了:
- 我将浏览器配置为访问本地代理,例如
http://localhost:8080/myproxy - 在我的浏览器中,我访问了一个网站,比如
http://example.com - 浏览器将 HTTP 请求(针对
http://example.com)传递给代理,再次在http://localhost:8080/myproxy运行 - 代理(取决于所使用的构造/机制及其行为配置方式)可能会或可能不会检查/执行此请求的操作
- 例如,如果代理配置为静态资源的缓存,它可能会检查请求以查看其请求的文档(JS 文件、CSS 文件、IMG 文件等)是否之前已缓存.如果是对缓存文档的请求,我们可以短路(完全绕过目标站点)并将响应(文件)发送回浏览器
- 代理将(或发出全新的 - ???)请求转发到目标站点 (
http://example.com) - 目标站点向代理发回 HTTP 响应
- 代理(取决于所使用的构造/机制及其行为配置方式)可能会或可能不会检查/执行此响应的操作
- 例如,如果代理已配置为扫描恶意恶意软件,我们可能会检查二进制数据的响应,如果检测到,则将二进制响应发送到某个第 3 方扫描工具进行通过/失败分析等.
- 代理将 HTTP 响应发送回浏览器
我倾向于使用 servlet 过滤器或 Spring 控制器方法,但不确定哪种方法适合呈现这些功能。有什么想法吗?
【问题讨论】:
-
你找到方法了吗?
标签: spring-mvc spring-boot proxy java-8 servlet-filters