Author: tchemit Date: 2014-05-16 15:14:22 +0200 (Fri, 16 May 2014) New Revision: 3962 Url: http://forge.chorem.org/projects/pollen/repository/revisions/3962 Log: use a real session object stored in cookie Added: trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiSession.java Modified: trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiRequestContext.java 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/PollenRestApiUtil.java Modified: trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiRequestContext.java =================================================================== --- trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiRequestContext.java 2014-05-16 13:13:49 UTC (rev 3961) +++ trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiRequestContext.java 2014-05-16 13:14:22 UTC (rev 3962) @@ -48,6 +48,8 @@ httpContext.getRequest().setAttribute(REQUEST_POLLEN_REQUEST_CONTEXT, serviceContext); } + protected PollenRestApiSession session; + protected PollenServiceContext serviceContext; public void setServiceContext(PollenServiceContext serviceContext) { @@ -66,6 +68,14 @@ return serviceContext.getSecurityContext(); } + public PollenRestApiSession getSession() { + return session; + } + + public void setSession(PollenRestApiSession session) { + this.session = session; + } + public SecurityService getSecurityService() { return serviceContext.newService(SecurityService.class); } 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-16 13:13:49 UTC (rev 3961) +++ trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiRequestFilter.java 2014-05-16 13:14:22 UTC (rev 3962) @@ -32,13 +32,11 @@ 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; /** @@ -77,18 +75,20 @@ protected PollenRestApiRequestContext prepareRequestContext(HttpContext context) throws PollenInvalidSessionTokenException { + PollenRestApiSession session = PollenRestApiSession.getSession(context); + PollenRestApiApplicationContext applicationContext = PollenRestApiApplicationContext.getApplicationContext(context.getServletContext()); PollenPersistenceContext persistenceContext = PollenTopiaTransactionFilter.getPersistenceContext(context.getRequest()); - //FIXME Reuse user locale PollenServiceContext serviceContext = - applicationContext.newServiceContext(persistenceContext, Locale.FRANCE); + applicationContext.newServiceContext(persistenceContext, session.getLocale()); PollenRestApiRequestContext requestContext = new PollenRestApiRequestContext(); requestContext.setServiceContext(serviceContext); + requestContext.setSession(session); PollenSecurityContext securityContext = createSecurityContext(context, applicationContext, requestContext); requestContext.setSecurityContext(securityContext); @@ -105,9 +105,9 @@ SecurityService securityService = requestContext.getSecurityService(); - // --- get session token (from cookie) --- // - CookieManager.CookieEntity pollenSession = httpContext.getCookieManager().get(PollenRestApiUtil.COOKIE_USER_SESSION); - String authParam = pollenSession == null ? null : pollenSession.getValue(); + // --- get session token (from session) --- // + PollenRestApiSession session = requestContext.getSession(); + String authParam = session.getSessionToken(); SessionToken sessionToken = securityService.getSessionTokenByToken(authParam); // --- get mainPrincipal (from request parameters) --- // Added: trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiSession.java =================================================================== --- trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiSession.java (rev 0) +++ trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiSession.java 2014-05-16 13:14:22 UTC (rev 3962) @@ -0,0 +1,88 @@ +package org.chorem.pollen.rest.api; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.debux.webmotion.server.call.CookieManager; +import org.debux.webmotion.server.call.HttpContext; + +import java.io.Serializable; +import java.util.Locale; + +/** + * Created on 5/16/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.0 + */ +public class PollenRestApiSession implements Serializable { + + private static final long serialVersionUID = 1L; + + /** Logger. */ + private static final Log log = LogFactory.getLog(PollenRestApiSession.class); + + public static final String COOKIE_SESSION = "pollenSession"; + + public static PollenRestApiSession getSession(HttpContext context) { + + CookieManager cookieManager = context.getCookieManager(); + + CookieManager.CookieEntity sessionCookie = cookieManager.get(COOKIE_SESSION); + + if (sessionCookie == null) { + + if (log.isInfoEnabled()) { + log.info("Will create user session."); + } + + PollenRestApiSession session = new PollenRestApiSession(); + + String language = context.getHeader(HttpContext.HEADER_LANGUAGE); + + if (log.isInfoEnabled()) { + log.info("Found Accept-Language: " + language); + } + + if (language == null) { + + language = Locale.FRENCH.getLanguage(); + + if (log.isInfoEnabled()) { + log.info("Use default language: " + language); + } + + } + + Locale locale = new Locale(language); + session.setLocale(locale); + + sessionCookie = cookieManager.create(COOKIE_SESSION, session); + cookieManager.add(sessionCookie); + + } + + PollenRestApiSession session = sessionCookie.getValue(PollenRestApiSession.class); + return session; + + } + + protected Locale locale; + + protected String sessionToken; + + public Locale getLocale() { + return locale; + } + + public void setLocale(Locale locale) { + this.locale = locale; + } + + public String getSessionToken() { + return sessionToken; + } + + public void setSessionToken(String sessionToken) { + this.sessionToken = sessionToken; + } +} Property changes on: trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiSession.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/PollenRestApiUtil.java =================================================================== --- trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiUtil.java 2014-05-16 13:13:49 UTC (rev 3961) +++ trunk/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiUtil.java 2014-05-16 13:14:22 UTC (rev 3962) @@ -9,7 +9,6 @@ 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; import org.debux.webmotion.server.call.HttpContext; import javax.servlet.http.HttpServletResponse; @@ -23,9 +22,6 @@ */ public class PollenRestApiUtil { - - public static final String COOKIE_USER_SESSION = "pollenSession"; - 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"; @@ -72,18 +68,15 @@ 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); + requestContext.getSession().setSessionToken(sessionToken.getPollenToken().getToken()); } else { - cookieManager.remove(COOKIE_USER_SESSION); + requestContext.getSession().setSessionToken(null); }