Author: tchemit Date: 2014-05-13 16:27:12 +0200 (Tue, 13 May 2014) New Revision: 3938 Url: http://forge.chorem.org/projects/pollen/repository/revisions/3938 Log: always prepare response even if there was an error Added: 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/v1/ErrorAction.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-12 22:30:20 UTC (rev 3937) +++ trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiRequestFilter.java 2014-05-13 14:27:12 UTC (rev 3938) @@ -34,7 +34,6 @@ import org.debux.webmotion.server.call.CookieManager; import org.debux.webmotion.server.call.HttpContext; -import javax.servlet.http.HttpServletResponse; import java.util.Locale; import java.util.Map; @@ -48,15 +47,13 @@ public static final String REQUEST_PERMISSION_PARAMETER = "permission"; - public static final String POLLEN_SESSION = "pollenSession"; - public void inject(HttpContext context) throws PollenInvalidSessionTokenException { PollenRestApiRequestContext requestContext = prepareRequestContext(context); doProcess(); - prepareResponse(context, requestContext); + RequestResponses.prepareResponse(context, requestContext); } @@ -84,42 +81,17 @@ } - protected void prepareResponse(HttpContext context, PollenRestApiRequestContext requestContext) { - - HttpServletResponse response = context.getResponse(); - response.addHeader(HttpContext.HEADER_ACCESS_CONTROL_ALLOW_ORIGIN, "*"); - response.addHeader(HttpContext.HEADER_ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); - - CookieManager cookieManager = context.getCookieManager(); - - PollenSecurityContext securityContext = requestContext.getSecurityContext(); - SessionToken sessionToken = securityContext.getSessionToken(); - if (sessionToken != null) { - - CookieManager.CookieEntity pollenSession = cookieManager.create(POLLEN_SESSION, sessionToken.getPollenToken().getToken()); - cookieManager.add(pollenSession); - - } else { - - cookieManager.remove(POLLEN_SESSION); - - } - - } - protected PollenSecurityContext createSecurityContext(HttpContext httpContext, PollenRestApiApplicationContext applicationContext, PollenRestApiRequestContext requestContext) throws PollenInvalidSessionTokenException { - SecurityService securityService = requestContext.getSecurityService(); // --- get session token (from cookie) --- // - CookieManager.CookieEntity pollenSession = httpContext.getCookieManager().get(POLLEN_SESSION); + CookieManager.CookieEntity pollenSession = httpContext.getCookieManager().get(RequestResponses.COOKIE_USER_SESSION); String authParam = pollenSession == null ? null : pollenSession.getValue(); SessionToken sessionToken = securityService.getSessionTokenByToken(authParam); - // --- get mainPrincipal (from request parameters) --- // Map<String, String[]> parameters = httpContext.getParameters(); String[] strings = parameters.get(REQUEST_PERMISSION_PARAMETER); Added: 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 (rev 0) +++ trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/RequestResponses.java 2014-05-13 14:27:12 UTC (rev 3938) @@ -0,0 +1,51 @@ +package org.chorem.pollen.rest.api; + +import org.chorem.pollen.persistence.entity.SessionToken; +import org.chorem.pollen.services.service.security.PollenSecurityContext; +import org.debux.webmotion.server.call.CookieManager; +import org.debux.webmotion.server.call.HttpContext; + +import javax.servlet.http.HttpServletResponse; + +/** + * Created on 5/13/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.0 + */ +public class RequestResponses { + + public static final String COOKIE_USER_SESSION = "userSession"; + + public static void prepareResponse(HttpContext context) { + + PollenRestApiRequestContext requestContext = PollenRestApiRequestContext.getRequestContext(context); + + prepareResponse(context, requestContext); + + } + + public static void prepareResponse(HttpContext context, PollenRestApiRequestContext requestContext) { + + HttpServletResponse response = context.getResponse(); + response.addHeader(HttpContext.HEADER_ACCESS_CONTROL_ALLOW_ORIGIN, "*"); + response.addHeader(HttpContext.HEADER_ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); + + CookieManager cookieManager = context.getCookieManager(); + + PollenSecurityContext securityContext = requestContext.getSecurityContext(); + SessionToken sessionToken = securityContext.getSessionToken(); + if (sessionToken != null) { + + CookieManager.CookieEntity pollenSession = cookieManager.create(COOKIE_USER_SESSION, sessionToken.getPollenToken().getToken()); + cookieManager.add(pollenSession); + + } else { + + cookieManager.remove(COOKIE_USER_SESSION); + + } + + } + +} Property changes on: trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/RequestResponses.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/ErrorAction.java =================================================================== --- trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/ErrorAction.java 2014-05-12 22:30:20 UTC (rev 3937) +++ trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/ErrorAction.java 2014-05-13 14:27:12 UTC (rev 3938) @@ -23,8 +23,10 @@ * #L% */ +import org.chorem.pollen.rest.api.RequestResponses; import org.chorem.pollen.services.service.InvalidFormException; import org.debux.webmotion.server.WebMotionController; +import org.debux.webmotion.server.call.HttpContext; import org.debux.webmotion.server.render.Render; import javax.servlet.http.HttpServletResponse; @@ -37,36 +39,46 @@ */ public class ErrorAction extends WebMotionController { - public InvalidFormException on400Form(InvalidFormException e) { + public InvalidFormException on400Form(HttpContext context, InvalidFormException e) { + RequestResponses.prepareResponse(context); + // just return the exception, return e; } - public Render on404(Exception e) { + public Render on404(HttpContext context, Exception e) { + RequestResponses.prepareResponse(context); + Render render = renderError(HttpServletResponse.SC_NOT_FOUND, e.getMessage()); return render; } - public Render on401(Exception e) { + public Render on401(HttpContext context, Exception e) { + RequestResponses.prepareResponse(context); + Render render = renderError(HttpServletResponse.SC_UNAUTHORIZED, e.getMessage()); return render; } - public Render on403(Exception e) { + public Render on403(HttpContext context, Exception e) { + RequestResponses.prepareResponse(context); + Render render = renderError(HttpServletResponse.SC_FORBIDDEN, e.getMessage()); return render; } - public Render on500(Exception e) { + public Render on500(HttpContext context, Exception e) { + RequestResponses.prepareResponse(context); + Render render = renderError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); return render;