栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何从POST请求中获取XML并在Servlet过滤器中对其进行修改?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何从POST请求中获取XML并在Servlet过滤器中对其进行修改?

您不能两次使用InputStream,需要创建一个包装类,以保留InputStream的可重复副本。

public class ReadTwiceHttpServletRequestWrapper extends HttpServletRequestWrapper {private ByteArrayOutputStream outputStream = new ByteArrayOutputStream();public ReadTwiceHttpServletRequestWrapper(HttpServletRequest request) {    super(request);    try {        IOUtils.copy(request.getInputStream(), outputStream);    } catch (IOException e) {        e.printStackTrace();    }}@Overridepublic BufferedReader getReader() throws IOException {    return new BufferedReader(new InputStreamReader(new ByteArrayInputStream(outputStream.toByteArray())));}@Overridepublic ServletInputStream getInputStream() throws IOException {    final ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());    return new ServletInputStream() {        @Override        public int readLine(byte[] b, int off, int len) throws IOException { return inputStream.read(b, off, len);        }        @Override        public boolean isFinished() { return inputStream.available() > 0;        }        @Override        public boolean isReady() { return true;        }        @Override        public void setReadListener(ReadListener arg0) { // TODO Auto-generated method stub        }        @Override        public int read() throws IOException { return inputStream.read();        }    };}public void setBody(String body) {    outputStream = new ByteArrayOutputStream();    try {        outputStream.write(body.getBytes());    } catch (IOException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }}public String getBody() {    return new String(outputStream.toByteArray());}

}

然后,您需要使用链中第一个过滤器进行初始化。

public class ReadTwiceFilter implements Filter {@Overridepublic void destroy() {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)        throws IOException, ServletException {    ReadTwiceHttpServletRequestWrapper readTwiceHttpServletRequestWrapper = new ReadTwiceHttpServletRequestWrapper( (HttpServletRequest) request);    String newBody = readTwiceHttpServletRequestWrapper.getBody().replace("<soap:studentId>1</soap:studentId>", "<soap:studentId>2</soap:studentId>");    readTwiceHttpServletRequestWrapper.setBody(newBody);    chain.doFilter(readTwiceHttpServletRequestWrapper, response);}@Overridepublic void init(FilterConfig arg0) throws ServletException {}

}



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/466343.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号