SuperMap-iServer过滤请求返回值
目的:
iServer发布的arcgis地图服务中,由于tileinfo参数为null,导致用arcgis-ios客户端开发的APP闪退。通过过滤器将get请求的返回值修改
代码:
package com.channel.filter; import java.io.ByteArrayOutputStream;
import java.io.IOException; import javax.servlet.ServletOutputStream;
import javax.servlet.WriteListener;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper; /**
* 返回值输出代理类
*
* @Title: ResponseWrapper
* @Description:
* @author kokJuis
* @date 上午9:52:11
*/
public class ResponseWrapper extends HttpServletResponseWrapper { private ByteArrayOutputStream buffer; private ServletOutputStream out; public ResponseWrapper(HttpServletResponse httpServletResponse) {
super(httpServletResponse);
buffer = new ByteArrayOutputStream();
out = new WrapperOutputStream(buffer);
} @Override
public ServletOutputStream getOutputStream() throws IOException {
return out;
} @Override
public void flushBuffer() throws IOException {
if (out != null) {
out.flush();
}
} public byte[] getContent() throws IOException {
flushBuffer();
return buffer.toByteArray();
} class WrapperOutputStream extends ServletOutputStream {
private ByteArrayOutputStream bos; public WrapperOutputStream(ByteArrayOutputStream bos) {
this.bos = bos;
} @Override
public void write(int b) throws IOException {
bos.write(b);
} @Override
public boolean isReady() { // TODO Auto-generated method stub
return false; } @Override
public void setWriteListener(WriteListener arg0) { // TODO Auto-generated method stub }
} }
在dofilter中实现返回值的替换
package com.channel.filter; import java.io.IOException;
import java.io.StringReader; import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; /**
* 返回值输出过滤器,这里用来加密返回值
*
* @Title: ResponseFilter
* @Description:
* @author kokJuis
* @date 上午9:52:42
*/
public class ResponseFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
ResponseWrapper wrapperResponse = new ResponseWrapper(
(HttpServletResponse) response);// 转换成代理类
// 这里只拦截返回,直接让请求过去,如果在请求前有处理,可以在这里处理
filterChain.doFilter(request, wrapperResponse);
byte[] content = wrapperResponse.getContent();// 获取返回值
// 判断是否有值
if (content.length > 0) { String str = new String(content, "UTF-8");
System.out.println(str);
String ciphertext = null; // 判断下代码中是否包含tileinfo,包含则进行过滤,否则直接跳过响应体
if (str.contains("tileInfo")) {
try {
// 获取返回值中tileinfo值,将null替换成{}测试
ciphertext = str.replaceFirst("null", "{}");
System.out.println("修改对应的参数!");
} catch (Exception e) {
e.printStackTrace();
}
} // 把返回值输出到客户端
ServletOutputStream out = response.getOutputStream();
out.write(ciphertext.getBytes());
out.flush();
}
} public void init(FilterConfig arg0) throws ServletException { } public void destroy() { }
}
配置说明:
1、jar包复制到iserver安装目录\webapps\iserver\WEB-INF\lib下
2、修改iserver安装目录\webapps\iserver\WEB-INF的web.xml
3、在web.xml中新增如下配置:
<!-- 过滤请求 -->
<filter>
<filter-name>ResponseFilter</filter-name>
<filter-class>com.channel.filter.ResponseFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ResponseFilter</filter-name>
<url-pattern>/services/map-test2/arcgisrest/test/MapServer</url-pattern>
注:换成对应的的服务地址,只过滤指定的服务
</filter-mapping>
4、使用客户端动态出图,得到的返回值中tileinfo有null变为{}
SuperMap-iServer过滤请求返回值的更多相关文章
- 微信浏览器Ajax请求返回值走error
微信浏览器Ajax post请求是返回值走的error $.ajax({ type: "POST", url: "https://XXXX", cache: f ...
- nodejs中使用http请求返回值为html时乱码问题
今天用nodejs进行http请求时返回的数据是一个html文件,然后我还是按照以前解析json数据的方法.果不其然报错了:SyntaxError: Unexpected token in JSON ...
- HTTP请求返回值所代表的含义
一些常见的状态码为: 200 - 服务器成功返回网页(表示请求成功) 404 - 请求的网页不存在(可能是网络的问题,也可能是网页没办法访问不代表网页不存在) 503 - 服务器超时(服务器故障) 下 ...
- Jmeter 提取http请求返回值里json数据参数化方法
第三方插件下载地址:http://jmeter-plugins.org/downloads/all/ 插件下载后解压:找到JMeterPlugins-Extras.jar,把JMeterPlugins ...
- 关于spring中请求返回值的json序列化/反序列化问题
https://cloud.tencent.com/developer/article/1381083 https://www.jianshu.com/p/db07543ffe0a 先留个坑
- 学习笔记_springmvc返回值、数据写到页面、表单提交、ajax、重定向
数据写到页面 后台往前台传数据 TestController添加 /** * 方法的返回值采用ModelAndView, new ModelAndView("index", map ...
- springmvc返回值、数据写到页面、表单提交、ajax、重定向
实验是在前一篇文章的项目上做的: 数据写到页面 后台往前台传数据 TestController添加 /** * 方法的返回值采用ModelAndView, new ModelAndView(" ...
- Ext_两种处理服务器端返回值的方式
1.Form表单提交返回值处理 //提交基本信息表单 f.form.submit({ clientValidation:true, //表单提交后台处理地址 url:' ...
- dubbo rest返回值异常Incompatible types: declared root type
2018-08-28 17:26:02,208 [http-bio-9090-exec-1][][][][][] ERROR com.wjs.member.plugin.intercepter.Ser ...
随机推荐
- 本地Oracle客户端11g升级12c导致PowerCenter无法连接ODBC数据源
问题: 本地Oracle客户端由11g-32bit升级为12c-64bit时,在PowerCenter Designer使用原来的ODBC连接导入数据库表时,发生如下错误: 原因: 原oracle11 ...
- win10安装MySQL5.7.21
一. 下载MySQL 1. 打开MySQL官网,选择DOWNLOADS --> Community 2. 下拉页面找到MySQL on Windows(installers & tool ...
- 【ABP杂烩】面向切面编程(AOP)知识总结
目录 1.存在问题 2.AOP的概念 3.AOP应用范围 3.AOP实现方式 4.应用举例 5.结束语 本文在学习[老张的哲学]系列文章AOP相关章节后,自己归纳总结的笔记. 1.存在问题 最近,其它 ...
- 短视频 SDK 6大功能技术实现方式详解
第三方短视频解决方案作为快速切入短视频行业的首选方式,选择一款功能齐全.性能优异的短视频解决方案十分重要. 今天我们来谈谈短视频 SDK 6大重要功能点及其技术实现方式. 短视频拍摄 断点续拍 指在拍 ...
- python 时间模块time,datetime
模块(module)是 Python 中非常重要的东西,你可以把它理解为 Python 的扩展工具.换言之,Python 默认情况下提供了一些可用的东西,但是这些默认情况下提供的还远远不能满足编程实践 ...
- More Effective C# 【前戏】
买了很多很多书,想到就买,觉得有需要就买.买书的情况是不一样的:有时候,买的时候还是比较空,买来之后工作开始忙起来了,就没怎么看:有时候,买的时候比较忙,忙的乱了方寸,觉得有必要找本书来静心一下.不过 ...
- 彻底弄懂python编码
在编写python程序的过程中,中英文混用经常会出现编码问题.围绕此问题,本文首先介绍编码的含义及常用编码,随后列举几个python经常遇到的编码异常及解决方法,接着列举笔者在实践中遇到的异常出现的情 ...
- TensorFlow中的通信机制——Rendezvous(二)gRPC传输
背景 [作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] 本篇是TensorFlow通信机制系列的第二篇文章,主要梳理使用gRPC网络传 ...
- Perl读取标准输入<STDIN>、读取文件输入<>和chomp函数
读取标准输入<STDIN> <STDIN>表示从标准输入中读取内容,如果没有,则等待输入.<STDIN>读取到的结果中,如果没有意外,都会自带换行符. 例如,tes ...
- Redis主从复制、多实例、高可用(三)--技术流ken
Redis主从复制 在开始实现redis的高可用之前,首先来学习一下如何实现redis的主从复制,毕竟高可用也会依赖主从复制的技术. Redis的主从复制,可以实现一个主节点master可以有多个从节 ...