javascript
高德地图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.背景
最近使用高德地圖開發(fā)地圖功能
新申請的key和密鑰配置到原來的代碼中,發(fā)現怎么都不行,但是使用原來的key和密鑰是可以的
然后重新閱讀了高德的文檔 發(fā)現高德地圖JSAPI升級到了v2.0 因JSAPI鑒權升級上線,控制臺新申請的Key同時會生成一個安全密鑰一起使用
這時就需要使用到2.0的驗證方式了 可以參考開發(fā)文檔 https://lbs.amap.com/api/javascript-api/guide/abc/prepare
但這是需要配置Nginx反向代理進行配置 這樣我們的key和密鑰就分離了 多個key和密鑰就需要配置多個Nginx代理
從考慮服務器成本的角度來說 這個開銷有點大 后面突發(fā)奇想 是否能使用后端代碼進行反向代理 此時就開始與度娘約會了
2.反向代理
反向代理(Reverse Proxy)方式是指代理服務器來接受網絡上的請求,然后將請求轉發(fā)給目標服務器,并將目標服務器上返回的結果回傳給請求的客服端,此時的代理服務器對外就表現為一個反向代理服務器
一般來說 反向代理服務器會接收請求 但自身不處理請求業(yè)務 而是對請求經過一下處理 如記錄日志 緩存數據 或身份驗證等 然后再將請求轉發(fā)到相應的應用服務器中進行處理 最后將結果返回
3.smiley-http-proxy-servlet 反向代理
在與度娘約會的過程中,發(fā)現了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进行反向代理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信小程序----开发小技巧(二)
- 下一篇: 微信小程序学习心得----订咖啡