r3939 - trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api
Author: tchemit Date: 2014-05-14 00:45:45 +0200 (Wed, 14 May 2014) New Revision: 3939 Url: http://forge.chorem.org/projects/pollen/repository/revisions/3939 Log: implements CORS response from pollen not webmotion Modified: trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiRequestFilter.java trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/RequestResponses.java Modified: trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiRequestFilter.java =================================================================== --- trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiRequestFilter.java 2014-05-13 14:27:12 UTC (rev 3938) +++ trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiRequestFilter.java 2014-05-13 22:45:45 UTC (rev 3939) @@ -31,9 +31,13 @@ import org.chorem.pollen.services.service.security.PollenSecurityContext; import org.chorem.pollen.services.service.security.SecurityService; import org.debux.webmotion.server.WebMotionFilter; +import org.debux.webmotion.server.call.Call; import org.debux.webmotion.server.call.CookieManager; import org.debux.webmotion.server.call.HttpContext; +import org.debux.webmotion.server.render.Render; +import org.debux.webmotion.server.render.RenderStatus; +import javax.servlet.http.HttpServletResponse; import java.util.Locale; import java.util.Map; @@ -47,12 +51,26 @@ public static final String REQUEST_PERMISSION_PARAMETER = "permission"; - public void inject(HttpContext context) throws PollenInvalidSessionTokenException { + public void inject(Call call, HttpContext context) throws PollenInvalidSessionTokenException { PollenRestApiRequestContext requestContext = prepareRequestContext(context); doProcess(); + if (HttpContext.METHOD_OPTIONS.equals(context.getMethod())) { + + Render render = call.getRender(); + + if (render instanceof RenderStatus && + HttpServletResponse.SC_OK == ((RenderStatus) render).getCode()) { + + // operation accepted + RequestResponses.addOptionCorsHeaders(context); + + } + + } + RequestResponses.prepareResponse(context, requestContext); } Modified: trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/RequestResponses.java =================================================================== --- trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/RequestResponses.java 2014-05-13 14:27:12 UTC (rev 3938) +++ trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/RequestResponses.java 2014-05-13 22:45:45 UTC (rev 3939) @@ -1,5 +1,6 @@ package org.chorem.pollen.rest.api; +import org.apache.commons.lang3.StringUtils; import org.chorem.pollen.persistence.entity.SessionToken; import org.chorem.pollen.services.service.security.PollenSecurityContext; import org.debux.webmotion.server.call.CookieManager; @@ -17,6 +18,10 @@ public static final String COOKIE_USER_SESSION = "userSession"; + public static final String HEADER_ACCESS_CONTROL_REQUEST_HEADERS = "Access-Control-Request-Headers"; + + public static final String HEADER_ACCESS_CONTROL_ALLOW_HEADERS = "Access-Control-Allow-Headers"; + public static void prepareResponse(HttpContext context) { PollenRestApiRequestContext requestContext = PollenRestApiRequestContext.getRequestContext(context); @@ -48,4 +53,12 @@ } + public static void addOptionCorsHeaders(HttpContext context) { + + String requestHeaders = context.getHeader(HEADER_ACCESS_CONTROL_REQUEST_HEADERS); + + if (StringUtils.isNotBlank(requestHeaders)) { + context.getResponse().addHeader(HEADER_ACCESS_CONTROL_ALLOW_HEADERS, requestHeaders); + } + } }
participants (1)
-
tchemit@users.chorem.org