高德地图JSAPI 2.0使用Java代码代替Nginx进行反向代理
高德地图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进行反向代理相关推荐
- vue2实现高德地图 JSAPI 2.0可拖拽的路线规划(DragRoute)组件实现对每个经过点设置不同的经过点名称
问题记录 vue2实现高德地图 JSAPI 2.0可拖拽的路线规划(DragRoute)组件实现对每个经过点设置不同的经过点名称 官方文档及示例 DragRoute相关API API中没有任何方法让我 ...
- java js 高德api_高德地图JSApi
火星坐标获取demo #iMap{height:500px;width:600px;float:left;} .info{float:left;margin:0 0 0 10px;} label{wi ...
- 高德地图升级v2.0踩坑日记
事情是这样的,有一天产品找到我说我们系统的地图绘制板块的时候有些卡,是否可以优化一下. 于是我持怀疑态度去系统查看,大部分的地图操作都很流畅,莫非产品在耍我??? 直到我点开了一个导入的板块数据(如下 ...
- 基于高德地图JsAPI进行浏览器精确定位,实现手机端考勤打卡功能
前言: 由于项目需求需要在项目中实现手机端(基于网页)考勤打卡功能,最初考虑使用H5自身定位功能,但尝试过后,效果很不稳定.然后尝试使用百度地图JsAPI,百度家的稳定倒是很稳定,没想到的是定位位置和 ...
- 高德地图轨迹PHP,高德地图JSAPI轨迹重复绘制
介绍一个基于高德地图JSAPI轨迹展示案例: 说明: 1.定时接口取数据刷新轨迹: 2.轨迹坐标数量较大: 3.轨迹点位信息需要展示,如时间.速度.多少点位: 4.避免地图重新渲染,只刷新坐标: 使用 ...
- 高德地图JSAPI的使用注意项
前言 最近有个项目用到了高德地图,基于高德引擎进行相关需求的开发,开发过程中碰到了一些问题,简单的记录一下. 选择高德地图 那肯定是因为买了高德地图的什么东西哈哈哈,就是可以基于高德引擎进行开发并且部 ...
- 全网详细介绍nginx的反向代理、正向代理配置,location的指令说明,反向代理的两个示例代码以及全局块,events块和http快的说明。
文章目录 1. 文章引言 2. 何谓反向代理 3. 解析nginx的配置文件 3.1 全局块(global block) 3.2 events块(events block) 3.3 http块(htt ...
- 高德地图、google、openstreenmap地图瓦片数据爬取--java代码(地图数据篇.3)
听老人家说:多看美女会长寿 地图之家总目录(建议先查看该内容) 文章末尾处提供保证可运行完整代码包,运行如有问题,可"私信"博主. 效果如下所示: 爬取后的瓦片数据可通过nginx ...
- 修复 SyntaxHighlighter 3.0.83 Java 代码多行注释 Bug
使用 SyntaxHighlighter 3.0.83 对包含多行注释(/* .... */) 的 Java 代码进行语法着色时会将其后的所有代码当成多行注释进行着色. 修改 shBrushJava. ...
- 高德地图jsapi marker.markOnAMAP报错
当使用的最新jsapi2.0的时候,我们按照示例用js唤起高德地图APP时候报错 marker.markOnAMAP({name:'首开广场123',position:marker.getPositi ...
最新文章
- usb 1-5.2: device not accepting address 4, error -110问题解决方案
- C语言 游戏远程call调用,关于远程注入游戏并调用 call 的问题
- python pyqt eric_科学网—PyQt及Eric的安装 - 张鲁新的博文
- 【Python CheckiO 题解】The Warriors
- 喝酒划拳中的数学(附:摇号)
- Sphinx 初始化项目
- android中进行https连接的方式的详解
- 停止预览时调用Camera.release(), 出现Method called after release()异常问题原因及解决办法...
- 26-[Boostrap]-全局css样式,组件,控件
- Three Tips
- Java常见gis开源框架,开源gis大全java
- MATLAB视频运动目标检测
- 计算机加内存还是固态硬盘,电脑慢加内存还是固态硬盘好
- android 发短信 oppo,OPPO R11短信发送失败怎么办?OPPO手机短信发送失败的解决方法...
- Gluster-Heketi-Kubernetes 安装步骤(以DaemonSet形式安装) Ubuntu 16.04
- mybatis type-aliases-package
- 在线教育app 一对一辅导 内容付费 直播 网校app EduJoin
- 三个遗传算法matlab程序实例
- 可替代50欧姆_50欧姆阻抗四层板射频信号隔层参考做不了吗?
- MapGis 二次开发 常见问题 转
热门文章
- 9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的求职之路
- 读书笔记 - 说话之道 - 2
- C++11之内联名字空间(inline namespace)和ADL特性(Argument-Dependent name Lookup)
- jodconverter下载地址
- 如何利用计算机画立体几何图形,[转载]谈谈用Word2003画立体几何图形的技巧
- 警报声.wav_具有中央警报缓存的jAlarms 1.4
- 重启计算机之前无法刷新,更新完补丁不断提示是否重启电脑的解决方法
- Linux的自动装机服务器搭建(持续优化)
- 【转载】大龄码农的新西兰移民之路
- allgro pcb铜皮编辑_Allegro设计PCB基础知识:快捷键设置、铜皮处理、DC-DC布局布线、电源分割等等...