背景:
项目初期 和硬件集成,实现了些功能服务,由于是局域网环境,安全问题当时都可以最小化无视。随着对接的服务越来越多,部分功能上云,此时就需要有一种手段可以控制到其他项目/接口的访问权限。 无疑 反向代理是最轻快的解决办法。
依赖 smiley-http-proxy-servlet GitHub链接
javax servlet-api 请选择
单文件 直接用代码 ProxyServlet.java
新版本里面还有一个URITemplateProxyServlet.java 用来实现 URL 与查询参数匹配
如 http://mywebapp/cluster/subpath?_subHost=namenode&_port=8080&_path=monitor匹配
http://{_subHost}.behindfirewall.mycompany.com:{_port}/{_path}
URITemplateProxyServlet.java
仅仅是代理接口 默认官网示例使用即可,参考第二个接口代理。
以Nginx 代理Grafana监控平台为例,解决静态资源加载失败、访问鉴权、及websocket连接问题
直接访问grafana代理 springboot项目端口8088报错,静态资源 路径不正确 加载失败,grafana live/ws链接也会失败,参考附录。
nginx配置参考:
划重点
springboot 代理的/grafana/* 到 http://127.0.0.1:9999
静态资源的访问失败 404或 错误的返回html首页,是因为路径不符合此规则导致代理是失败
proxy_pass http://127.0.0.1:8088/grafana//;
由nginx代理到 // 则问题解决 ,使 /grafana/* 代理规则生效
其他访问的服务调用 nginx的这个代理
更安全的访问
只需要限制 原服务端口的放行规则,如仅本机可访问,然后项目增加过滤器自行判断权限。
启动类添加@ServletComponentScan扫描WebFilter,增加 Filter
``收工~~