/** * ============================================================================= * * ORCID (R) Open Source * http://orcid.org * * Copyright (c) 2012-2014 ORCID, Inc. * Licensed under an MIT-Style License (MIT) * http://orcid.org/open-source-license * * This copyright and license information (including a link to the full license) * shall be included in its entirety in all copies or substantial portion of * the software. * * ============================================================================= */ package org.orcid.core.web.filters; import java.io.IOException; import java.io.OutputStream; import java.util.Map; import javax.annotation.Resource; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.web.filter.OncePerRequestFilter; /** * Adds jsonp callbacks Follow spring tutorial * http://jpgmr.wordpress.com/2010/07 * /28/tutorial-implementing-a-servlet-filter-for * -jsonp-callback-with-springs-delegatingfilterproxy/ * * @author Robert Peters (rcpeters) * */ public class JsonpCallbackFilter extends OncePerRequestFilter { private static Log log = LogFactory.getLog(JsonpCallbackFilter.class); @Resource CrossDomainWebManger crossDomainWebManger; @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; Map<String, String[]> parms = httpRequest.getParameterMap(); if (parms.containsKey("callback")) { HttpServletRequestWrapper requestWrapper = new AcceptHeaderRequestWrapper(httpRequest, "application/json"); OutputStream out = httpResponse.getOutputStream(); GenericResponseWrapper responseWrapper = new GenericResponseWrapper(httpResponse); filterChain.doFilter(requestWrapper, responseWrapper); out.write(new String(parms.get("callback")[0] + "(").getBytes()); out.write(responseWrapper.getData()); out.write(new String(");").getBytes()); responseWrapper.setContentType("text/javascript;charset=UTF-8"); out.close(); } else { filterChain.doFilter(request, response); } } }