首页 文章

在Java / Spring Boot中实现转发代理

提问于
浏览
3

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

  • Resource caching :如果以前访问过静态资源(CSS,JS,媒体文件等),我们可以直接从代理的本地(文件系统)缓存中获取它

  • User tracing/auditing :我们可以检查HTTP标头,看看谁在向哪些目标网址发出请求,也许可以将这些访问记录写入日志

  • Content Filtering :URL过滤,可能检查目标站点的响应并防止恶意软件下载等 .

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

我想知道:提供这些类型功能的最佳Spring / JavaEE构造是什么? Java EE servlet过滤器? spring 控制器?其他一些(也许是基于AOP的)构造?

同样,这个想法是为了:

  • 我将浏览器配置为命中本地代理,比如 http://localhost:8080/myproxy

  • 在我的浏览器中,我去了一个网站,比如说 http://example.com

  • 浏览器将HTTP请求(对于 http://example.com )传递给代理,再次在 http://localhost:8080/myproxy 运行

  • 代理(取决于所使用的构造/机制及其配置的行为)可能会也可能不会检查/执行此请求

  • 例如,如果代理配置为充当静态资源的缓存,它可能会检查请求以查看它是否请求先前已缓存的文档(JS文件,CSS文件,IMG文件等) . 如果是对缓存文档的请求,我们可以短路(完全绕过目标站点)并将响应(文件)发送回浏览器

  • 代理将目标站点(或全新 - ??? )请求转发( http://example.com

  • 目标站点将HTTP响应发送回代理

  • 代理(取决于所使用的构造/机制及其配置的行为)可能会也可能不会使用此响应检查/执行操作

  • 例如,如果代理已配置为扫描恶意软件,我们可能会检查二进制数据的响应,如果检测到,则将二进制响应发送给某些第三方扫描工具进行通过/失败分析等 .

  • 代理将HTTP响应发送回浏览器

我倾向于使用servlet过滤器或Spring控制器方法,但不确定哪种方法适合于呈现这些类型的功能 . 有任何想法吗?

1 回答

  • 0

    出于学习目的,您可能希望避免使用Spring,并且只需要实现一个简单的HttpServlet即可 . 从那里你可以检查HttpServletRequest对象做任何事情,包括转发它 . 您可以在servlet本身中实现缓存逻辑,但是,添加一个使用缓存行为增强servlet的ServletFilter可能是有意义的 .

相关问题