小编Sah*_*rma的帖子

Jetty Filter修改响应 - java.lang.IllegalStateException:WRITER

我试图修改过滤器中的http响应,并得到以下异常

java.lang.IllegalStateException:位于org.eclipse.jetty.servlets的javax.servlet.ServletResponseWrapper.getOutputStream(ServletResponseWrapper.java:142)的org.eclipse.jetty.server.Response.getOutputStream(Response.java:657)处的WRITER. ProxyServlet.service(ProxyServlet.java:414)atg.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:643)org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1331)在com.cisco.vsx.node.proxy.http.RegexFilter.doFilter(RegexFilter.java:36)

我正在使用SelectChannelSelector和ProxyServlet.Transparent代理.

以下是测试类的片段

ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");

ProxyServlet.Transparent p1 = new ProxyServlet.Transparent("/proxy",
    "www.cisco.com", 80);
ServletHolder servletHolder = new ServletHolder(p1);
context.addServlet(servletHolder, "/proxy/*"); 
context.addFilter(new FilterHolder(RegexFilter.class), "/*", null);

server.setHandler(context);

server.start();
server.join();
Run Code Online (Sandbox Code Playgroud)

这是过滤器类的代码

PrintWriter out = response.getWriter();
CharResponseWrapper wrapper = new CharResponseWrapper((HttpServletResponse) response);

chain.doFilter(request, wrapper);

String html = wrapper.toString();
if (regex != null && response.getContentType() != null 
        && response.getContentType().startsWith("text/html")) {
    Matcher matcher = regex.matcher(html);
    Map<Integer, Integer> matches = new LinkedHashMap<Integer, Integer>();
    while (matcher.find()) {
        int start = matcher.start(1); …
Run Code Online (Sandbox Code Playgroud)

servlets jetty servlet-filters

7
推荐指数
1
解决办法
5524
查看次数

标签 统计

jetty ×1

servlet-filters ×1

servlets ×1