package com.aggrepoint.servlet; import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.servlet.ServletOutputStream; import javax.servlet.WriteListener; import javax.servlet.http.HttpServletResponse; import com.aggrepoint.winlet.RespHeaderConst; import com.fasterxml.jackson.databind.node.JsonNodeFactory; import com.fasterxml.jackson.databind.node.ObjectNode; public class CORSResponseStream extends ServletOutputStream implements RespHeaderConst { protected HttpServletResponse response = null; protected ServletOutputStream output = null; public CORSResponseStream(HttpServletResponse response) throws IOException { super(); this.response = response; this.output = response.getOutputStream(); } Pattern P_COOKIE = Pattern.compile("JSESSIONID=([^;]+);"); @Override public void close() throws IOException { ObjectNode node = JsonNodeFactory.instance.objectNode(); for (String header : new String[] { HEADER_UPDATE, HEADER_TITLE, HEADER_DIALOG, HEADER_REDIRECT, HEADER_CACHE, HEADER_MSG }) { String value = response.getHeader(header); if (value != null && !value.trim().equals("")) { node.put(header, value); } } try { Matcher m = P_COOKIE.matcher(response.getHeader("Set-Cookie")); if (m.find()) { node.put("X-Winlet-Session-ID", m.group(1)); } } catch (Exception e) { } output.write(("<div id=\"winlet_header\" style=\"display:none\">" + node.toString() + "</div>").getBytes()); output.flush(); output.close(); } @Override public void flush() throws IOException { output.flush(); } @Override public void write(int b) throws IOException { output.write((byte) b); } @Override public void write(byte b[]) throws IOException { write(b, 0, b.length); } @Override public void write(byte b[], int off, int len) throws IOException { output.write(b, off, len); } @Override public boolean isReady() { return output.isReady(); } @Override public void setWriteListener(WriteListener writeListener) { output.setWriteListener(writeListener); } }