概述
高德地图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进行反向代理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复