高德地图JSAPI2.0使用Java代码代替Nginx进行反向代理

  • 1.背景
  • 2.反向代理
  • 3.smiley-http-proxy-servlet 反向代理
  • 4.代码应用
    • 4.1导入smiley-http-proxy-servlet
    • 4.2 注册servlet组件 (ServletRegistrationBean)
    • 4.3 在Filter拦截器中对_AMapService的请求拼接jscode
  • 5.源码下载

1.背景

最近使用高德地图开发地图功能
新申请的key和密钥配置到原来的代码中,发现怎么都不行,但是使用原来的key和密钥是可以的
然后重新阅读了高德的文档 发现高德地图JSAPI升级到了v2.0 因JSAPI鉴权升级上线,控制台新申请的Key同时会生成一个安全密钥一起使用
这时就需要使用到2.0的验证方式了 可以参考开发文档 https://lbs.amap.com/api/javascript-api/guide/abc/prepare
但这是需要配置Nginx反向代理进行配置 这样我们的key和密钥就分离了 多个key和密钥就需要配置多个Nginx代理
从考虑服务器成本的角度来说 这个开销有点大 后面突发奇想 是否能使用后端代码进行反向代理 此时就开始与度娘约会了

2.反向代理

反向代理(Reverse Proxy)方式是指代理服务器来接受网络上的请求,然后将请求转发给目标服务器,并将目标服务器上返回的结果回传给请求的客服端,此时的代理服务器对外就表现为一个反向代理服务器
一般来说 反向代理服务器会接收请求 但自身不处理请求业务 而是对请求经过一下处理 如记录日志 缓存数据 或身份验证等 然后再将请求转发到相应的应用服务器中进行处理 最后将结果返回

3.smiley-http-proxy-servlet 反向代理

在与度娘约会的过程中,发现了smiley-http-proxy-servlet
http-proxy-servlet 是基于filter进行服务代理 只需要进行相关配置即可代理
smiley-http-proxy-servlet的详见不过多赘述 可自行找度娘约会

4.代码应用

4.1导入smiley-http-proxy-servlet

<dependency><groupId>org.mitre.dsmiley.httpproxy</groupId><artifactId>smiley-http-proxy-servlet</artifactId><version>1.12.1</version>
</dependency>

4.2 注册servlet组件 (ServletRegistrationBean)

按照高德配置Nginx的标准 将/_AMapService/*请求 使用ProxyServlet 进行代理

    @Beanpublic ServletRegistrationBean servletRegistrationAMapService() {ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new ProxyServlet(), "/_AMapService/*");servletRegistrationBean.setName("AMapService");servletRegistrationBean.addInitParameter(ProxyServlet.P_TARGET_URI, "https://restapi.amap.com");servletRegistrationBean.addInitParameter(ProxyServlet.P_LOG, Boolean.FALSE.toString());return servletRegistrationBean;}

4.3 在Filter拦截器中对_AMapService的请求拼接jscode

private final String AMapJSCode = "xxxxxxxxxxxxx";@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) servletRequest;HttpServletResponse response = (HttpServletResponse) servletResponse;response.setHeader("Access-Control-Allow-Origin", "*");response.setHeader("Access-Control-Allow-Methods", "POST,GET,PUT,DELETE,OPTIONS");response.setHeader("Access-Control-Max-Age", "3600");StringBuilder allowHeaders = new StringBuilder();allowHeaders.append("accept,content-type,origin,referer,user-agent,Accept,Content-Type,Origin,Referer,User-Agent,Content-MD5,Authentication");response.setHeader("Access-Control-Allow-Headers", allowHeaders.toString());response.setHeader("Access-Control-Allow-Credentials", "true");response.setHeader("Access-Control-Expose-Headers", "version");response.setCharacterEncoding("UTF-8");response.setContentType("application/json;charset=utf-8");if (HttpMethod.OPTIONS.toString().equals(request.getMethod())) {// 设置跨域配置response.setStatus(HttpServletResponse.SC_OK);} else {// 此处为核心代码 将jscode参数进行拼接String requestURI = request.getRequestURI();log.info("requestURI>>>{}", requestURI);boolean isAdd = requestURI.contains("_AMapService");HttpServletRequestWrapper requestWrapper = new HttpServletRequestWrapper(request) {@Overridepublic String getQueryString() {if (isAdd) {return (super.getQueryString() + "&jscode=" + AMapJSCode);}return super.getQueryString();}};filterChain.doFilter(requestWrapper, response);}}

5.源码下载

https://download.csdn.net/download/shechaojin/86396986

高德地图JSAPI 2.0使用Java代码代替Nginx进行反向代理相关推荐

  1. vue2实现高德地图 JSAPI 2.0可拖拽的路线规划(DragRoute)组件实现对每个经过点设置不同的经过点名称

    问题记录 vue2实现高德地图 JSAPI 2.0可拖拽的路线规划(DragRoute)组件实现对每个经过点设置不同的经过点名称 官方文档及示例 DragRoute相关API API中没有任何方法让我 ...

  2. java js 高德api_高德地图JSApi

    火星坐标获取demo #iMap{height:500px;width:600px;float:left;} .info{float:left;margin:0 0 0 10px;} label{wi ...

  3. 高德地图升级v2.0踩坑日记

    事情是这样的,有一天产品找到我说我们系统的地图绘制板块的时候有些卡,是否可以优化一下. 于是我持怀疑态度去系统查看,大部分的地图操作都很流畅,莫非产品在耍我??? 直到我点开了一个导入的板块数据(如下 ...

  4. 基于高德地图JsAPI进行浏览器精确定位,实现手机端考勤打卡功能

    前言: 由于项目需求需要在项目中实现手机端(基于网页)考勤打卡功能,最初考虑使用H5自身定位功能,但尝试过后,效果很不稳定.然后尝试使用百度地图JsAPI,百度家的稳定倒是很稳定,没想到的是定位位置和 ...

  5. 高德地图轨迹PHP,高德地图JSAPI轨迹重复绘制

    介绍一个基于高德地图JSAPI轨迹展示案例: 说明: 1.定时接口取数据刷新轨迹: 2.轨迹坐标数量较大: 3.轨迹点位信息需要展示,如时间.速度.多少点位: 4.避免地图重新渲染,只刷新坐标: 使用 ...

  6. 高德地图JSAPI的使用注意项

    前言 最近有个项目用到了高德地图,基于高德引擎进行相关需求的开发,开发过程中碰到了一些问题,简单的记录一下. 选择高德地图 那肯定是因为买了高德地图的什么东西哈哈哈,就是可以基于高德引擎进行开发并且部 ...

  7. 全网详细介绍nginx的反向代理、正向代理配置,location的指令说明,反向代理的两个示例代码以及全局块,events块和http快的说明。

    文章目录 1. 文章引言 2. 何谓反向代理 3. 解析nginx的配置文件 3.1 全局块(global block) 3.2 events块(events block) 3.3 http块(htt ...

  8. 高德地图、google、openstreenmap地图瓦片数据爬取--java代码(地图数据篇.3)

    听老人家说:多看美女会长寿 地图之家总目录(建议先查看该内容) 文章末尾处提供保证可运行完整代码包,运行如有问题,可"私信"博主. 效果如下所示: 爬取后的瓦片数据可通过nginx ...

  9. 修复 SyntaxHighlighter 3.0.83 Java 代码多行注释 Bug

    使用 SyntaxHighlighter 3.0.83 对包含多行注释(/* .... */) 的 Java 代码进行语法着色时会将其后的所有代码当成多行注释进行着色. 修改 shBrushJava. ...

  10. 高德地图jsapi marker.markOnAMAP报错

    当使用的最新jsapi2.0的时候,我们按照示例用js唤起高德地图APP时候报错 marker.markOnAMAP({name:'首开广场123',position:marker.getPositi ...

最新文章

  1. usb 1-5.2: device not accepting address 4, error -110问题解决方案
  2. C语言 游戏远程call调用,关于远程注入游戏并调用 call 的问题
  3. python pyqt eric_科学网—PyQt及Eric的安装 - 张鲁新的博文
  4. 【Python CheckiO 题解】The Warriors
  5. 喝酒划拳中的数学(附:摇号)
  6. Sphinx 初始化项目
  7. android中进行https连接的方式的详解
  8. 停止预览时调用Camera.release(), 出现Method called after release()异常问题原因及解决办法...
  9. 26-[Boostrap]-全局css样式,组件,控件
  10. Three Tips
  11. Java常见gis开源框架,开源gis大全java
  12. MATLAB视频运动目标检测
  13. 计算机加内存还是固态硬盘,电脑慢加内存还是固态硬盘好
  14. android 发短信 oppo,OPPO R11短信发送失败怎么办?OPPO手机短信发送失败的解决方法...
  15. Gluster-Heketi-Kubernetes 安装步骤(以DaemonSet形式安装) Ubuntu 16.04
  16. mybatis type-aliases-package
  17. 在线教育app 一对一辅导 内容付费 直播 网校app EduJoin
  18. 三个遗传算法matlab程序实例
  19. 可替代50欧姆_50欧姆阻抗四层板射频信号隔层参考做不了吗?
  20. MapGis 二次开发 常见问题 转

热门文章

  1. 9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的求职之路
  2. 读书笔记 - 说话之道 - 2
  3. C++11之内联名字空间(inline namespace)和ADL特性(Argument-Dependent name Lookup)
  4. jodconverter下载地址
  5. 如何利用计算机画立体几何图形,[转载]谈谈用Word2003画立体几何图形的技巧
  6. 警报声.wav_具有中央警报缓存的jAlarms 1.4
  7. 重启计算机之前无法刷新,更新完补丁不断提示是否重启电脑的解决方法
  8. Linux的自动装机服务器搭建(持续优化)
  9. 【转载】大龄码农的新西兰移民之路
  10. allgro pcb铜皮编辑_Allegro设计PCB基础知识:快捷键设置、铜皮处理、DC-DC布局布线、电源分割等等...