package com.wesabe.servlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; import com.wesabe.servlet.normalizers.*; public class SafeResponse extends HttpServletResponseWrapper { private static final HeaderNameNormalizer HEADER_NAME_NORMALIZER = new HeaderNameNormalizer(); private static final HeaderValueNormalizer HEADER_VALUE_NORMALIZER = new HeaderValueNormalizer(); private static final CookieNormalizer COOKIE_NORMALIZER = new CookieNormalizer(); private final HttpServletResponse response; public SafeResponse(HttpServletResponse response) { super(response); this.response = response; } @Override public void addCookie(Cookie cookie) { try { super.addCookie(COOKIE_NORMALIZER.normalize(cookie)); } catch (ValidationException e) { throw new BadResponseException(response, e); } } @Override public void addHeader(String name, String value) { try { super.addHeader( HEADER_NAME_NORMALIZER.normalize(name), HEADER_VALUE_NORMALIZER.normalize(value) ); } catch (ValidationException e) { throw new BadResponseException(response, e); } } @Override public void addDateHeader(String name, long date) { try { super.addDateHeader(HEADER_NAME_NORMALIZER.normalize(name), date); } catch (ValidationException e) { throw new BadResponseException(response, e); } } @Override public void addIntHeader(String name, int value) { try { super.addIntHeader(HEADER_NAME_NORMALIZER.normalize(name), value); } catch (ValidationException e) { throw new BadResponseException(response, e); } } @Override public void setHeader(String name, String value) { try { super.setHeader( HEADER_NAME_NORMALIZER.normalize(name), HEADER_VALUE_NORMALIZER.normalize(value) ); } catch (ValidationException e) { throw new BadResponseException(response, e); } } @Override public void setDateHeader(String name, long date) { try { super.setDateHeader(HEADER_NAME_NORMALIZER.normalize(name), date); } catch (ValidationException e) { throw new BadResponseException(response, e); } } @Override public void setIntHeader(String name, int value) { try { super.setIntHeader(HEADER_NAME_NORMALIZER.normalize(name), value); } catch (ValidationException e) { throw new BadResponseException(response, e); } } @Override public String encodeRedirectUrl(String url) { return url; } @Override public String encodeRedirectURL(String url) { return url; } @Override public String encodeUrl(String url) { return url; } @Override public String encodeURL(String url) { return url; } @Override public String toString() { return response.toString(); } }