我是靠谱客的博主 酷酷滑板,最近开发中收集的这篇文章主要介绍高德地图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 进行代理

    @Bean
    public 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";

    @Override
    public 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) {
                @Override
                public 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进行反向代理的全部内容,希望文章能够帮你解决高德地图JSAPI 2.0使用Java代码代替Nginx进行反向代理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部