statelessfilter-commits Mailing List for Java Stateless Servlet Filter (Page 3)
Status: Beta
Brought to you by:
nricheton
You can subscribe to this list here.
2011 |
Jan
|
Feb
(16) |
Mar
(4) |
Apr
|
May
|
Jun
(1) |
Jul
(5) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(15) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2012 |
Jan
(3) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(5) |
Sep
(1) |
Oct
|
Nov
|
Dec
|
2013 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(23) |
Nov
|
Dec
|
From: <nri...@us...> - 2011-07-25 06:25:00
|
Revision: 83 http://statelessfilter.svn.sourceforge.net/statelessfilter/?rev=83&view=rev Author: nricheton Date: 2011-07-25 06:24:54 +0000 (Mon, 25 Jul 2011) Log Message: ----------- https://sourceforge.net/apps/mantisbt/statelessfilter/view.php?id=25 0000025: Full response buffering is overkill for cookies backends Modified Paths: -------------- trunk/stateless-processor-cookie/src/main/java/net/sourceforge/statelessfilter/processor/request/Cookie2AttributeProcessor.java trunk/stateless-session/src/main/java/net/sourceforge/statelessfilter/backend/session/SessionBackend.java Modified: trunk/stateless-processor-cookie/src/main/java/net/sourceforge/statelessfilter/processor/request/Cookie2AttributeProcessor.java =================================================================== --- trunk/stateless-processor-cookie/src/main/java/net/sourceforge/statelessfilter/processor/request/Cookie2AttributeProcessor.java 2011-07-24 21:51:13 UTC (rev 82) +++ trunk/stateless-processor-cookie/src/main/java/net/sourceforge/statelessfilter/processor/request/Cookie2AttributeProcessor.java 2011-07-25 06:24:54 UTC (rev 83) @@ -16,6 +16,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import net.sourceforge.statelessfilter.filter.Configuration; import net.sourceforge.statelessfilter.processor.IRequestProcessor; import net.sourceforge.statelessfilter.utils.CookieUtils; @@ -114,8 +115,8 @@ * * @see net.sourceforge.statelessfilter.filter.IPlugin#isBufferingRequired() */ - public boolean isBufferingRequired() { - return true; + public String isBufferingRequired() { + return Configuration.BUFFERING_HEADERS; } /** Modified: trunk/stateless-session/src/main/java/net/sourceforge/statelessfilter/backend/session/SessionBackend.java =================================================================== --- trunk/stateless-session/src/main/java/net/sourceforge/statelessfilter/backend/session/SessionBackend.java 2011-07-24 21:51:13 UTC (rev 82) +++ trunk/stateless-session/src/main/java/net/sourceforge/statelessfilter/backend/session/SessionBackend.java 2011-07-25 06:24:54 UTC (rev 83) @@ -24,6 +24,7 @@ import net.sourceforge.statelessfilter.backend.ISessionBackend; import net.sourceforge.statelessfilter.backend.ISessionData; import net.sourceforge.statelessfilter.backend.support.CookieDataSupport; +import net.sourceforge.statelessfilter.filter.Configuration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -76,8 +77,8 @@ // Nothing to init } - public boolean isBufferingRequired() { - return true; + public String isBufferingRequired() { + return Configuration.BUFFERING_HEADERS; } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nri...@us...> - 2011-07-24 21:51:21
|
Revision: 82 http://statelessfilter.svn.sourceforge.net/statelessfilter/?rev=82&view=rev Author: nricheton Date: 2011-07-24 21:51:13 +0000 (Sun, 24 Jul 2011) Log Message: ----------- https://sourceforge.net/apps/mantisbt/statelessfilter/view.php?id=25 0000025: Full response buffering is overkill for cookies backends Modified Paths: -------------- trunk/stateless-core/pom.xml trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/backend/support/CookieBackendSupport.java trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/filter/Configuration.java trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/filter/IPlugin.java trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/filter/StatelessFilter.java trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/session/StatelessSession.java trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/wrappers/StatelessRequestWrapper.java trunk/stateless-core/src/test/java/net/sourceforge/statelessfilter/backend/MockSessionBackend.java trunk/stateless-core/src/test/java/net/sourceforge/statelessfilter/filter/StatelessFilterTest.java Added Paths: ----------- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/wrappers/headers/ trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/wrappers/headers/HeaderBufferedHttpResponseWrapper.java Property Changed: ---------------- trunk/stateless-core/src/main/java/ Modified: trunk/stateless-core/pom.xml =================================================================== --- trunk/stateless-core/pom.xml 2011-06-15 10:39:12 UTC (rev 81) +++ trunk/stateless-core/pom.xml 2011-07-24 21:51:13 UTC (rev 82) @@ -5,7 +5,6 @@ <version>0.8-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> - <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> <name>Core</name> <version>0.8-SNAPSHOT</version> Property changes on: trunk/stateless-core/src/main/java ___________________________________________________________________ Added: svn:ignore + META-INF Modified: trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/backend/support/CookieBackendSupport.java =================================================================== --- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/backend/support/CookieBackendSupport.java 2011-06-15 10:39:12 UTC (rev 81) +++ trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/backend/support/CookieBackendSupport.java 2011-07-24 21:51:13 UTC (rev 82) @@ -25,6 +25,7 @@ import net.sourceforge.statelessfilter.backend.ISessionBackend; import net.sourceforge.statelessfilter.backend.ISessionData; +import net.sourceforge.statelessfilter.filter.Configuration; import net.sourceforge.statelessfilter.utils.CookieUtils; import org.apache.commons.codec.binary.Base64; @@ -55,218 +56,215 @@ * */ public abstract class CookieBackendSupport implements ISessionBackend { - /** - * If cookie data exceed this value, multiple cookie are created. - */ - private static final int COOKIE_MAX_SIZE = 3000; - private static Logger logger = LoggerFactory - .getLogger(CookieBackendSupport.class); + /** + * If cookie data exceed this value, multiple cookie are created. + */ + private static final int COOKIE_MAX_SIZE = 3000; + private static Logger logger = LoggerFactory.getLogger(CookieBackendSupport.class); - /* Constants used in properties */ - private static final String PARAM_COOKIEDOMAIN = "cookiedomain"; //$NON-NLS-1$ - private static final String PARAM_COOKIEMAXAGE = "cookiemaxage"; //$NON-NLS-1$ - private static final String PARAM_COOKIENAME = "cookiename"; //$NON-NLS-1$ - private static final String PARAM_COOKIEPATH = "cookiepath"; //$NON-NLS-1$ + /* Constants used in properties */ + private static final String PARAM_COOKIEDOMAIN = "cookiedomain"; //$NON-NLS-1$ + private static final String PARAM_COOKIEMAXAGE = "cookiemaxage"; //$NON-NLS-1$ + private static final String PARAM_COOKIENAME = "cookiename"; //$NON-NLS-1$ + private static final String PARAM_COOKIEPATH = "cookiepath"; //$NON-NLS-1$ - /** - * Constant used to store the number of cookie segment within a single - * request. This information is used for cleaning. - * - * <p>Constant value depends of the cookie name. - * @see CookieBackendSupport#setCookieName(String) - */ - private String ATTR_COUNT = "stateless.session.count"; //$NON-NLS-1$ + /** + * Constant used to store the number of cookie segment within a single + * request. This information is used for cleaning. + * + * <p> + * Constant value depends of the cookie name. + * + * @see CookieBackendSupport#setCookieName(String) + */ + private String ATTR_COUNT = "stateless.session.count"; //$NON-NLS-1$ - /* Default values */ - protected String cookieName = "session"; //$NON-NLS-1$ - protected String domain = null; - protected Integer maxAge = null; - protected String path = "/"; //$NON-NLS-1$ + /* Default values */ + protected String cookieName = "session"; //$NON-NLS-1$ + protected String domain = null; + protected Integer maxAge = null; + protected String path = "/"; //$NON-NLS-1$ - /** - * @see net.sourceforge.statelessfilter.backend.ISessionBackend#destroy() - */ - abstract public void destroy(); + /** + * @see net.sourceforge.statelessfilter.backend.ISessionBackend#destroy() + */ + abstract public void destroy(); - /** - * @see net.sourceforge.statelessfilter.backend.ISessionBackend#getId() - */ - abstract public String getId(); + /** + * @see net.sourceforge.statelessfilter.backend.ISessionBackend#getId() + */ + abstract public String getId(); - /** - * Read cookie configuration : name, path, domain and maxAge. - * - * @see net.sourceforge.statelessfilter.backend.ISessionBackend#init(java.util.Map) - */ - public void init(Map<String, String> config) throws Exception { - // Name - String name = config.get(PARAM_COOKIENAME); - if (!StringUtils.isEmpty(name)) { - setCookieName(name); - } + /** + * Read cookie configuration : name, path, domain and maxAge. + * + * @see net.sourceforge.statelessfilter.backend.ISessionBackend#init(java.util.Map) + */ + public void init(Map<String, String> config) throws Exception { + // Name + String name = config.get(PARAM_COOKIENAME); + if (!StringUtils.isEmpty(name)) { + setCookieName(name); + } - // Path - String path = config.get(PARAM_COOKIEPATH); - if (!StringUtils.isEmpty(path)) { - this.path = path; - } + // Path + String path = config.get(PARAM_COOKIEPATH); + if (!StringUtils.isEmpty(path)) { + this.path = path; + } - // Domain - String domain = config.get(PARAM_COOKIEDOMAIN); - if (!StringUtils.isEmpty(domain)) { - this.domain = domain; - } + // Domain + String domain = config.get(PARAM_COOKIEDOMAIN); + if (!StringUtils.isEmpty(domain)) { + this.domain = domain; + } - // MaxAge - String maxAge = config.get(PARAM_COOKIEMAXAGE); - if (!StringUtils.isEmpty(maxAge)) { - this.maxAge = new Integer(Integer.parseInt(maxAge)); - } + // MaxAge + String maxAge = config.get(PARAM_COOKIEMAXAGE); + if (!StringUtils.isEmpty(maxAge)) { + this.maxAge = new Integer(Integer.parseInt(maxAge)); + } - } + } - /** - * Always true for cookies since we need to create cookie at the end of the - * request, when data has already been sent. - * - * @see net.sourceforge.statelessfilter.backend.ISessionBackend#isBufferingRequired() - */ - public boolean isBufferingRequired() { - return true; - } + /** + * Buffering only headers should be enough for most cases. But if the + * application updates session after sending response body, switch to full + * buffering in configuration. + * + * @see net.sourceforge.statelessfilter.backend.ISessionBackend#isBufferingRequired() + */ + public String isBufferingRequired() { + return Configuration.BUFFERING_HEADERS; + } - /** - * @see net.sourceforge.statelessfilter.backend.ISessionBackend#restore(javax.servlet.http.HttpServletRequest) - */ - abstract public ISessionData restore(HttpServletRequest request); + /** + * @see net.sourceforge.statelessfilter.backend.ISessionBackend#restore(javax.servlet.http.HttpServletRequest) + */ + abstract public ISessionData restore(HttpServletRequest request); - /** - * @see net.sourceforge.statelessfilter.backend.ISessionBackend#save(net.sourceforge.statelessfilter.backend.ISessionData, - * java.util.List, javax.servlet.http.HttpServletRequest, - * javax.servlet.http.HttpServletResponse) - */ - abstract public void save(ISessionData session, - List<String> dirtyAttributes, HttpServletRequest request, - HttpServletResponse response) throws IOException; + /** + * @see net.sourceforge.statelessfilter.backend.ISessionBackend#save(net.sourceforge.statelessfilter.backend.ISessionData, + * java.util.List, javax.servlet.http.HttpServletRequest, + * javax.servlet.http.HttpServletResponse) + */ + abstract public void save(ISessionData session, List<String> dirtyAttributes, HttpServletRequest request, + HttpServletResponse response) throws IOException; - /** - * @deprecated see :{@link CookieUtils} - * @param request - * @param content - * @return - */ - @Deprecated - protected Cookie createCookie(String name, String content) { - try { - return CookieUtils - .createCookie(name, content, domain, path, maxAge); - } catch (SignatureException e) { - logger.error("Error creating cookie", e); //$NON-NLS-1$ - } - return null; - } + /** + * @deprecated see :{@link CookieUtils} + * @param request + * @param content + * @return + */ + @Deprecated + protected Cookie createCookie(String name, String content) { + try { + return CookieUtils.createCookie(name, content, domain, path, maxAge); + } catch (SignatureException e) { + logger.error("Error creating cookie", e); //$NON-NLS-1$ + } + return null; + } - /** - * @deprecated see :{@link CookieUtils} - * @param request - * @param name - * @return - */ - @Deprecated - protected Cookie getCookie(HttpServletRequest request, String name) { - try { - return CookieUtils.getCookie(request, name); - } catch (SignatureException e) { - logger.error("Error sending cookie", e); //$NON-NLS-1$ - } - return null; - } + /** + * @deprecated see :{@link CookieUtils} + * @param request + * @param name + * @return + */ + @Deprecated + protected Cookie getCookie(HttpServletRequest request, String name) { + try { + return CookieUtils.getCookie(request, name); + } catch (SignatureException e) { + logger.error("Error sending cookie", e); //$NON-NLS-1$ + } + return null; + } - /** - * Read raw data from cookie. - * - * @param request - * @param response - * @return - */ - protected byte[] getCookieData(HttpServletRequest request, - HttpServletResponse response) { - int i = 0; - Cookie c = null; - StringBuilder data = new StringBuilder(); + /** + * Read raw data from cookie. + * + * @param request + * @param response + * @return + */ + protected byte[] getCookieData(HttpServletRequest request, HttpServletResponse response) { + int i = 0; + Cookie c = null; + StringBuilder data = new StringBuilder(); - while ((c = getCookie(request, cookieName + i)) != null) { - data.append(c.getValue()); - i++; - } + while ((c = getCookie(request, cookieName + i)) != null) { + data.append(c.getValue()); + i++; + } - request.setAttribute(ATTR_COUNT, new Integer(i)); + request.setAttribute(ATTR_COUNT, new Integer(i)); - String dataString = data.toString(); - if (dataString.length() == 0) { - return null; - } - return Base64.decodeBase64(dataString); - } + String dataString = data.toString(); + if (dataString.length() == 0) { + return null; + } + return Base64.decodeBase64(dataString); + } - /** - * Set raw data in a cookie. Data is split in several cookies if it exceeds - * max cookie length. - * <p> - * Also ensure that the reponse cannot be cached (Cache-control header set - * to private/no-cache/no-store/must-revalidate) - * - * @param request - * @param response - * @param data - */ - protected void setCookieData(HttpServletRequest request, - HttpServletResponse response, byte[] data) { - // As soon as we send a session cookie, the response must not be cached. - response.setHeader("Cache-Control", - "private, no-cache, no-store, must-revalidate"); + /** + * Set raw data in a cookie. Data is split in several cookies if it exceeds + * max cookie length. + * <p> + * Also ensure that the reponse cannot be cached (Cache-control header set + * to private/no-cache/no-store/must-revalidate) + * + * @param request + * @param response + * @param data + */ + protected void setCookieData(HttpServletRequest request, HttpServletResponse response, byte[] data) { + // As soon as we send a session cookie, the response must not be cached. + response.setHeader("Cache-Control", "private, no-cache, no-store, must-revalidate"); - String encoded = StringUtils.EMPTY; - if (data != null) { - encoded = new String(Base64.encodeBase64(data)); - } + String encoded = StringUtils.EMPTY; + if (data != null) { + encoded = new String(Base64.encodeBase64(data)); + } - ArrayList<String> splittedData = new ArrayList<String>(); - while (encoded.length() > COOKIE_MAX_SIZE) { - splittedData.add(encoded.substring(0, COOKIE_MAX_SIZE)); - encoded = encoded.substring(COOKIE_MAX_SIZE); - } - if (encoded.length() > 0) { - splittedData.add(encoded); - } + ArrayList<String> splittedData = new ArrayList<String>(); + while (encoded.length() > COOKIE_MAX_SIZE) { + splittedData.add(encoded.substring(0, COOKIE_MAX_SIZE)); + encoded = encoded.substring(COOKIE_MAX_SIZE); + } + if (encoded.length() > 0) { + splittedData.add(encoded); + } - int i = 0; - Cookie c = null; - for (String datapart : splittedData) { - c = createCookie(cookieName + i, datapart); - response.addCookie(c); - i++; - } + int i = 0; + Cookie c = null; + for (String datapart : splittedData) { + c = createCookie(cookieName + i, datapart); + response.addCookie(c); + i++; + } - // Clear no longer used segments. - int previousCount = ((Integer) request.getAttribute(ATTR_COUNT)) - .intValue(); - while (i < previousCount) { - c = createCookie(cookieName + i, StringUtils.EMPTY); - response.addCookie(c); - i++; - } + // Clear no longer used segments. + int previousCount = ((Integer) request.getAttribute(ATTR_COUNT)).intValue(); + while (i < previousCount) { + c = createCookie(cookieName + i, StringUtils.EMPTY); + response.addCookie(c); + i++; + } - } + } - /** - * Set the name of the cookie and update internal values accordingly. - * @param cookieName - */ - protected void setCookieName(String cookieName) { - this.cookieName = cookieName; - - // Update constant to inclue cookie name. - ATTR_COUNT = "stateless." + cookieName + ".count"; //$NON-NLS-1$ //$NON-NLS-2$ - } + /** + * Set the name of the cookie and update internal values accordingly. + * + * @param cookieName + */ + protected void setCookieName(String cookieName) { + this.cookieName = cookieName; + + // Update constant to inclue cookie name. + ATTR_COUNT = "stateless." + cookieName + ".count"; //$NON-NLS-1$ //$NON-NLS-2$ + } } Modified: trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/filter/Configuration.java =================================================================== --- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/filter/Configuration.java 2011-06-15 10:39:12 UTC (rev 81) +++ trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/filter/Configuration.java 2011-07-24 21:51:13 UTC (rev 82) @@ -29,10 +29,15 @@ * */ public class Configuration { + + public static final String BUFFERING_FALSE="false" ; + public static final String BUFFERING_HEADERS="headers" ; + public static final String BUFFERING_FULL="full" ; + public HashMap<String, ISessionBackend> backends = new HashMap<String, ISessionBackend>(); public HashMap<String, String> backendsAttributeMapping = new HashMap<String, String>(); public String defaultBackend = StringUtils.EMPTY; - public boolean isBufferingRequired = false; + public String isBufferingRequired = BUFFERING_FALSE; public List<IRequestProcessor> requestProcessors = new ArrayList<IRequestProcessor>(); public boolean useDirty = false; } Modified: trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/filter/IPlugin.java =================================================================== --- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/filter/IPlugin.java 2011-06-15 10:39:12 UTC (rev 81) +++ trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/filter/IPlugin.java 2011-07-24 21:51:13 UTC (rev 82) @@ -56,5 +56,5 @@ * * @return */ - boolean isBufferingRequired(); + String isBufferingRequired(); } Modified: trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/filter/StatelessFilter.java =================================================================== --- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/filter/StatelessFilter.java 2011-06-15 10:39:12 UTC (rev 81) +++ trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/filter/StatelessFilter.java 2011-07-24 21:51:13 UTC (rev 82) @@ -41,6 +41,7 @@ import net.sourceforge.statelessfilter.spring.SpringObjectInstantiationListener; import net.sourceforge.statelessfilter.wrappers.BufferedHttpResponseWrapper; import net.sourceforge.statelessfilter.wrappers.StatelessRequestWrapper; +import net.sourceforge.statelessfilter.wrappers.headers.HeaderBufferedHttpResponseWrapper; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; @@ -55,453 +56,465 @@ * */ public class StatelessFilter implements Filter { - private static final String CONFIG_ATTRIBUTE_PREFIX = "attribute."; //$NON-NLS-1$ - private static final String CONFIG_DEFAULT_BACKEND = "default"; //$NON-NLS-1$ - private static final String CONFIG_DIRTY = "dirtycheck"; //$NON-NLS-1$ - private static final String CONFIG_INSTANTIATION_LISTENER = "instantiationListener"; //$NON-NLS-1$ - private static final String CONFIG_LOCATION = "configurationLocation"; //$NON-NLS-1$ - private static final String CONFIG_LOCATION_DEFAULT = "/stateless.properties"; //$NON-NLS-1$ - /** - * Location of backend configuration file. - */ - private static final String CONFIG_PLUGIN_BACKEND = "stateless-backend.properties"; //$NON-NLS-1$ - private static final String CONFIG_PLUGIN_BACKEND_IMPL = "backendImpl"; //$NON-NLS-1$ - /** - * Location of request processor configuration file. - */ - private static final String CONFIG_PLUGIN_PROCESSOR = "stateless-processor.properties"; //$NON-NLS-1$ - private static final String CONFIG_PLUGIN_PROCESSOR_IMPL = "processorImpl"; //$NON-NLS-1$ - private static final String DEBUG_INIT = "Stateless filter init..."; //$NON-NLS-1$ - private static final String DEBUG_PROCESSING = "Processing "; //$NON-NLS-1$ - private static final String DOT = "."; //$NON-NLS-1$ - private static final String EXCLUDE_PATTERN_SEPARATOR = ","; //$NON-NLS-1$ - private static final String INFO_BACKEND = "Backend "; //$NON-NLS-1$ - private static final String INFO_BUFFERING = " enables output buffering."; //$NON-NLS-1$ - private static final String INFO_DEFAULT_BACKEND = "Default Session backend is "; //$NON-NLS-1$ - private static final String INFO_READY = " ready."; //$NON-NLS-1$ - private static final String INFO_REQUEST_PROCESSOR = "Request processor "; //$NON-NLS-1$ + private static final String CONFIG_ATTRIBUTE_PREFIX = "attribute."; //$NON-NLS-1$ + private static final String CONFIG_DEFAULT_BACKEND = "default"; //$NON-NLS-1$ + private static final String CONFIG_DIRTY = "dirtycheck"; //$NON-NLS-1$ + private static final String CONFIG_INSTANTIATION_LISTENER = "instantiationListener"; //$NON-NLS-1$ + private static final String CONFIG_LOCATION = "configurationLocation"; //$NON-NLS-1$ + private static final String CONFIG_LOCATION_DEFAULT = "/stateless.properties"; //$NON-NLS-1$ + /** + * Location of backend configuration file. + */ + private static final String CONFIG_PLUGIN_BACKEND = "stateless-backend.properties"; //$NON-NLS-1$ + private static final String CONFIG_PLUGIN_BACKEND_IMPL = "backendImpl"; //$NON-NLS-1$ + /** + * Location of request processor configuration file. + */ + private static final String CONFIG_PLUGIN_PROCESSOR = "stateless-processor.properties"; //$NON-NLS-1$ + private static final String CONFIG_PLUGIN_PROCESSOR_IMPL = "processorImpl"; //$NON-NLS-1$ + private static final String DEBUG_INIT = "Stateless filter init..."; //$NON-NLS-1$ + private static final String DEBUG_PROCESSING = "Processing "; //$NON-NLS-1$ + private static final String DOT = "."; //$NON-NLS-1$ + private static final String EXCLUDE_PATTERN_SEPARATOR = ","; //$NON-NLS-1$ + private static final String INFO_BACKEND = "Backend "; //$NON-NLS-1$ + private static final String INFO_BUFFERING = " enables output buffering."; //$NON-NLS-1$ + private static final String INFO_DEFAULT_BACKEND = "Default Session backend is "; //$NON-NLS-1$ + private static final String INFO_READY = " ready."; //$NON-NLS-1$ + private static final String INFO_REQUEST_PROCESSOR = "Request processor "; //$NON-NLS-1$ - private static Logger logger = LoggerFactory - .getLogger(StatelessFilter.class); - private static final String WARN_BACKEND_NOT_FOUND1 = "Specified backend '"; //$NON-NLS-1$ - private static final String WARN_BACKEND_NOT_FOUND2 = "' is not installed. Missing jar ? "; //$NON-NLS-1$ - private static final String WARN_LOAD_CONF = "Cannot load global configuration /stateless.properties. Using defaults"; //$NON-NLS-1$ - private IObjectInstantiationListener instantiationListener = null; + private static Logger logger = LoggerFactory.getLogger(StatelessFilter.class); - private List<Pattern> excludePatterns = null; - private ServletContext servletContext = null; - protected Configuration configuration = new Configuration(); + private static final String WARN_BACKEND_NOT_FOUND1 = "Specified backend '"; //$NON-NLS-1$ + private static final String WARN_BACKEND_NOT_FOUND2 = "' is not installed. Missing jar ? "; //$NON-NLS-1$ + private static final String WARN_LOAD_CONF = "Cannot load global configuration /stateless.properties. Using defaults"; //$NON-NLS-1$ + private IObjectInstantiationListener instantiationListener = null; - /** - * Servlet config paramter name used to configure the list of the excluded - * uri patterns. - */ - public static final String PARAM_EXCLUDE_PATTERN_LIST = "excludePatternList"; //$NON-NLS-1$ + private List<Pattern> excludePatterns = null; + private ServletContext servletContext = null; + protected Configuration configuration = new Configuration(); - /** - * @see javax.servlet.Filter#destroy() - */ - public void destroy() { - // Destroy all backends - for (ISessionBackend backend : configuration.backends.values()) { - backend.destroy(); - } - configuration.backends.clear(); - } + /** + * Servlet config paramter name used to configure the list of the excluded + * uri patterns. + */ + public static final String PARAM_EXCLUDE_PATTERN_LIST = "excludePatternList"; //$NON-NLS-1$ - /** - * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, - * javax.servlet.ServletResponse, javax.servlet.FilterChain) - */ - public void doFilter(ServletRequest request, ServletResponse response, - FilterChain chain) throws IOException, ServletException { - HttpServletResponse httpResponse = (HttpServletResponse) response; + /** + * @see javax.servlet.Filter#destroy() + */ + public void destroy() { + // Destroy all backends + for (ISessionBackend backend : configuration.backends.values()) { + backend.destroy(); + } + configuration.backends.clear(); + } - // Test if the request is excluded - HttpServletRequest httpRequest = (HttpServletRequest) request; - if (isExcluded(httpRequest)) { - chain.doFilter(request, response); - return; - } + /** + * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, + * javax.servlet.ServletResponse, javax.servlet.FilterChain) + */ + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, + ServletException { + HttpServletResponse httpResponse = (HttpServletResponse) response; - // Wrap request - HttpServletRequest statelessRequest = new StatelessRequestWrapper( - (HttpServletRequest) request, configuration); + // Test if the request is excluded + HttpServletRequest httpRequest = (HttpServletRequest) request; + if (isExcluded(httpRequest)) { + chain.doFilter(request, response); + return; + } - // Wrap response if necessary - HttpServletResponse targetResponse = httpResponse; + // Wrap request + StatelessRequestWrapper statelessRequest = new StatelessRequestWrapper((HttpServletRequest) request, + configuration); - BufferedHttpResponseWrapper bufferedResponse = null; - if (configuration.isBufferingRequired) { - bufferedResponse = new BufferedHttpResponseWrapper(httpResponse); - targetResponse = bufferedResponse; - } + // Wrap response if necessary + HttpServletResponse targetResponse = httpResponse; - // Request processors - if (configuration.requestProcessors != null - && !configuration.requestProcessors.isEmpty()) { - IRequestProcessor rp = null; - for (int i = 0; i < configuration.requestProcessors.size(); i++) { - rp = configuration.requestProcessors.get(i); - try { - rp.preRequest(statelessRequest, targetResponse); - } catch (Exception e) { - throw new IOException(e.getMessage()); - } - } - } + BufferedHttpResponseWrapper bufferedResponse = null; + if (Configuration.BUFFERING_FULL.equals(configuration.isBufferingRequired)) { + bufferedResponse = new BufferedHttpResponseWrapper(httpResponse); + targetResponse = bufferedResponse; + }else + if (Configuration.BUFFERING_HEADERS.equals(configuration.isBufferingRequired)) { + targetResponse = new HeaderBufferedHttpResponseWrapper(statelessRequest,httpResponse); + } - // Proceed with request - chain.doFilter(statelessRequest, targetResponse); + // Request processors + if (configuration.requestProcessors != null && !configuration.requestProcessors.isEmpty()) { + IRequestProcessor rp = null; + for (int i = 0; i < configuration.requestProcessors.size(); i++) { + rp = configuration.requestProcessors.get(i); + try { + rp.preRequest(statelessRequest, targetResponse); + } catch (Exception e) { + throw new IOException(e.getMessage()); + } + } + } - // Write session - ((StatelessRequestWrapper) statelessRequest).writeSession( - statelessRequest, httpResponse); + // Proceed with request + chain.doFilter(statelessRequest, targetResponse); - // Request processors : post process. - if (configuration.requestProcessors != null - && !configuration.requestProcessors.isEmpty()) { - IRequestProcessor rp = null; - for (int i = configuration.requestProcessors.size() - 1; i >= 0; i--) { - rp = configuration.requestProcessors.get(i); - try { - rp.postProcess(statelessRequest, targetResponse); - } catch (Exception e) { - throw new IOException(e.getMessage()); - } - } - } + // Write session + if (!statelessRequest.isSessionWritten()) { + statelessRequest.writeSession(statelessRequest, httpResponse); + } - // Flush buffer if necessary - if (bufferedResponse != null) { - if (!bufferedResponse.performSend()) { - bufferedResponse.flushBuffer(); - response.getOutputStream().write(bufferedResponse.getBuffer()); - response.flushBuffer(); - } - } - } + // Request processors : post process. + if (configuration.requestProcessors != null && !configuration.requestProcessors.isEmpty()) { + IRequestProcessor rp = null; + for (int i = configuration.requestProcessors.size() - 1; i >= 0; i--) { + rp = configuration.requestProcessors.get(i); + try { + rp.postProcess(statelessRequest, targetResponse); + } catch (Exception e) { + throw new IOException(e.getMessage()); + } + } + } - /** - * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) - */ - public void init(FilterConfig filterConfig) throws ServletException { - if (logger.isDebugEnabled()) { - logger.debug(DEBUG_INIT); - } + // Flush buffer if necessary + if (bufferedResponse != null) { + if (!bufferedResponse.performSend()) { + bufferedResponse.flushBuffer(); + response.getOutputStream().write(bufferedResponse.getBuffer()); + response.flushBuffer(); + } + } + } - // Get Servlet Context - this.servletContext = filterConfig.getServletContext(); + /** + * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) + */ + public void init(FilterConfig filterConfig) throws ServletException { + if (logger.isDebugEnabled()) { + logger.debug(DEBUG_INIT); + } - // Configuration - Properties globalProp = new Properties(); + // Get Servlet Context + this.servletContext = filterConfig.getServletContext(); - // Try to load global configuration. - String configLocation = filterConfig.getInitParameter(CONFIG_LOCATION); - if (configLocation == null) { - configLocation = CONFIG_LOCATION_DEFAULT; - } - try { - globalProp.load(StatelessFilter.class - .getResourceAsStream(configLocation)); - } catch (Exception e) { - logger.warn(WARN_LOAD_CONF); - // This is not fatal, will just use defaults. - } + // Configuration + Properties globalProp = new Properties(); - // Enables Spring instantiation listener if Spring is available and - // configured. - if (SpringContextChecker.checkForSpring(servletContext)) { + // Try to load global configuration. + String configLocation = filterConfig.getInitParameter(CONFIG_LOCATION); + if (configLocation == null) { + configLocation = CONFIG_LOCATION_DEFAULT; + } + try { + globalProp.load(StatelessFilter.class.getResourceAsStream(configLocation)); + } catch (Exception e) { + logger.warn(WARN_LOAD_CONF); + // This is not fatal, will just use defaults. + } - logger.info("Enabling Spring instantiation listener"); //$NON-NLS-1$ + // Enables Spring instantiation listener if Spring is available and + // configured. + if (SpringContextChecker.checkForSpring(servletContext)) { - instantiationListener = new SpringObjectInstantiationListener(); - instantiationListener.setServletContext(servletContext); - } + logger.info("Enabling Spring instantiation listener"); //$NON-NLS-1$ - // Load instantiation listener - try { - initInstantiationListener(globalProp); - } catch (Exception e) { - throw new ServletException( - "Failed to load instantiation listener from /stateless.properties", //$NON-NLS-1$ - e); - } + instantiationListener = new SpringObjectInstantiationListener(); + instantiationListener.setServletContext(servletContext); + } - // Load and init all plugins + // Load instantiation listener + try { + initInstantiationListener(globalProp); + } catch (Exception e) { + throw new ServletException("Failed to load instantiation listener from /stateless.properties", //$NON-NLS-1$ + e); + } - try { - detectAndInitPlugins(CONFIG_PLUGIN_BACKEND, globalProp, - IPlugin.TYPE_BACKEND); - detectAndInitPlugins(CONFIG_PLUGIN_PROCESSOR, globalProp, - IPlugin.TYPE_REQUEST_PROCESSOR); + // Load and init all plugins - } catch (Exception e) { - throw new ServletException(e); - } + try { + detectAndInitPlugins(CONFIG_PLUGIN_BACKEND, globalProp, IPlugin.TYPE_BACKEND); + detectAndInitPlugins(CONFIG_PLUGIN_PROCESSOR, globalProp, IPlugin.TYPE_REQUEST_PROCESSOR); - // Process attribute mapping - initAttributeMapping(globalProp); + } catch (Exception e) { + throw new ServletException(e); + } - // Read default backend - initDefaultBackend(globalProp); + // Process attribute mapping + initAttributeMapping(globalProp); - // Use dirty state - initDirtyState(globalProp); + // Read default backend + initDefaultBackend(globalProp); - // init the excluded pattern from the servlet config - initExcludedPattern(filterConfig); + // Use dirty state + initDirtyState(globalProp); - checkConfiguration(); - } + // Init Buffering mode + initBuffering(globalProp); - private void checkConfiguration() throws ServletException { - if (this.configuration.backends.size() == 0) { - throw new ServletException( - "No backend installed. Please add one (stateless-session for instance) in the classpath"); //$NON-NLS-1$ - } - } + // init the excluded pattern from the servlet config + initExcludedPattern(filterConfig); - private void initExcludedPattern(FilterConfig filterConfig) { - String excludedPatternList = filterConfig - .getInitParameter(PARAM_EXCLUDE_PATTERN_LIST); - if (excludedPatternList != null) { - String[] splittedExcludedPatternList = excludedPatternList - .split(EXCLUDE_PATTERN_SEPARATOR); - List<Pattern> patterns = new ArrayList<Pattern>(); - Pattern pattern = null; - for (String element : splittedExcludedPatternList) { - pattern = Pattern.compile(element); - patterns.add(pattern); - } - this.excludePatterns = patterns; - } - } + checkConfiguration(); + } - private void detectAndInitPlugins(String propertyFile, - Properties filterConfiguration, String type) throws Exception { - Enumeration<URL> configurationURLs; + private void initBuffering(Properties globalProp) { + String buffering = globalProp.getProperty("buffering", Configuration.BUFFERING_FALSE); + applyBuffering(buffering, "Configuration"); + } - configurationURLs = StatelessFilter.class.getClassLoader() - .getResources(propertyFile); + /** + * Change buffering mode if current mode is lower than requested. + * + * @param mode + */ + private void applyBuffering(String mode, String source) { + if (Configuration.BUFFERING_FULL.equals(mode) + && !Configuration.BUFFERING_FULL.equals(configuration.isBufferingRequired)) { + configuration.isBufferingRequired = Configuration.BUFFERING_FULL; + if (logger.isInfoEnabled()) + logger.info("Switching to buffering mode " + configuration.isBufferingRequired + " (" + source + ")"); + } else if (Configuration.BUFFERING_HEADERS.equals(mode) + && Configuration.BUFFERING_FALSE.equals(configuration.isBufferingRequired)) { + configuration.isBufferingRequired = Configuration.BUFFERING_HEADERS; + if (logger.isInfoEnabled()) + logger.info("Switching to buffering mode " + configuration.isBufferingRequired + " (" + source + ")"); + } - URL url = null; - Properties pluginConfiguration = null; - InputStream is = null; - while (configurationURLs.hasMoreElements()) { - url = configurationURLs.nextElement(); - if (logger.isDebugEnabled()) { - logger.debug(DEBUG_PROCESSING + url.toString()); - } + } - // Load plugin configuration - pluginConfiguration = new Properties(); - is = url.openStream(); - pluginConfiguration.load(is); - is.close(); + /** + * Does some self tests to ensure configuration is valid + * + * @throws ServletException + */ + private void checkConfiguration() throws ServletException { + if (this.configuration.backends.size() == 0) { + throw new ServletException( + "No backend installed. Please add one (stateless-session for instance) in the classpath"); //$NON-NLS-1$ + } + } - // Init plugin - initPlugin(pluginConfiguration, filterConfiguration, type); - } + private void initExcludedPattern(FilterConfig filterConfig) { + String excludedPatternList = filterConfig.getInitParameter(PARAM_EXCLUDE_PATTERN_LIST); + if (excludedPatternList != null) { + String[] splittedExcludedPatternList = excludedPatternList.split(EXCLUDE_PATTERN_SEPARATOR); + List<Pattern> patterns = new ArrayList<Pattern>(); + Pattern pattern = null; + for (String element : splittedExcludedPatternList) { + pattern = Pattern.compile(element); + patterns.add(pattern); + } + this.excludePatterns = patterns; + } + } - } + private void detectAndInitPlugins(String propertyFile, Properties filterConfiguration, String type) + throws Exception { + Enumeration<URL> configurationURLs; - private void initAttributeMapping(Properties globalProp) - throws ServletException { - for (Object key : globalProp.keySet()) { - String paramName = (String) key; - if (paramName.startsWith(CONFIG_ATTRIBUTE_PREFIX)) { - String attrName = paramName.substring(CONFIG_ATTRIBUTE_PREFIX - .length()); - String backend = globalProp.getProperty(paramName); - configuration.backendsAttributeMapping.put(attrName, backend); + configurationURLs = StatelessFilter.class.getClassLoader().getResources(propertyFile); - // Ensure backend is available - if (!configuration.backends.containsKey(backend)) { - throw new ServletException( - "Attributes are mapped on backend " + backend //$NON-NLS-1$ - + " but it is not installed."); //$NON-NLS-1$ - } - } - } - } + URL url = null; + Properties pluginConfiguration = null; + InputStream is = null; + while (configurationURLs.hasMoreElements()) { + url = configurationURLs.nextElement(); + if (logger.isDebugEnabled()) { + logger.debug(DEBUG_PROCESSING + url.toString()); + } - private void initDefaultBackend(Properties globalProp) { - String defaultBack = globalProp.getProperty(CONFIG_DEFAULT_BACKEND); - if (defaultBack != null) { - if (configuration.backends.containsKey(defaultBack)) { - configuration.defaultBackend = defaultBack; - } else { - if (logger.isWarnEnabled()) { - logger.warn(WARN_BACKEND_NOT_FOUND1 + defaultBack - + WARN_BACKEND_NOT_FOUND2); - } - // This is not fatal will use first backend. - } - } - } + // Load plugin configuration + pluginConfiguration = new Properties(); + is = url.openStream(); + pluginConfiguration.load(is); + is.close(); - private void initDirtyState(Properties globalProp) { - String useDirty = globalProp.getProperty(CONFIG_DIRTY); - if (Boolean.parseBoolean(useDirty)) { - configuration.useDirty = true; - } + // Init plugin + initPlugin(pluginConfiguration, filterConfiguration, type); + } - if (logger.isInfoEnabled()) { - logger.info("Use dirty state: " + configuration.useDirty); //$NON-NLS-1$ - logger.info(INFO_DEFAULT_BACKEND + configuration.defaultBackend); - } - } + } - /** - * Get and create instantiation listener from configuration file. - * - * @param globalProp - * @throws ClassNotFoundException - * @throws InstantiationException - * @throws IllegalAccessException - */ + private void initAttributeMapping(Properties globalProp) throws ServletException { + for (Object key : globalProp.keySet()) { + String paramName = (String) key; + if (paramName.startsWith(CONFIG_ATTRIBUTE_PREFIX)) { + String attrName = paramName.substring(CONFIG_ATTRIBUTE_PREFIX.length()); + String backend = globalProp.getProperty(paramName); + configuration.backendsAttributeMapping.put(attrName, backend); - private void initInstantiationListener(Properties globalProp) - throws ClassNotFoundException, InstantiationException, - IllegalAccessException { - String clazz = globalProp.getProperty(CONFIG_INSTANTIATION_LISTENER); - if (!StringUtils.isEmpty(clazz)) { - @SuppressWarnings("unchecked") - Class<IObjectInstantiationListener> backClazz = (Class<IObjectInstantiationListener>) Class - .forName(clazz); + // Ensure backend is available + if (!configuration.backends.containsKey(backend)) { + throw new ServletException("Attributes are mapped on backend " + backend //$NON-NLS-1$ + + " but it is not installed."); //$NON-NLS-1$ + } + } + } + } - // Create new instance - instantiationListener = backClazz.newInstance(); - instantiationListener.setServletContext(servletContext); - logger.info("Using instantiation listener {}", clazz); //$NON-NLS-1$ - } - } + private void initDefaultBackend(Properties globalProp) { + String defaultBack = globalProp.getProperty(CONFIG_DEFAULT_BACKEND); + if (defaultBack != null) { + if (configuration.backends.containsKey(defaultBack)) { + configuration.defaultBackend = defaultBack; + } else { + if (logger.isWarnEnabled()) { + logger.warn(WARN_BACKEND_NOT_FOUND1 + defaultBack + WARN_BACKEND_NOT_FOUND2); + } + // This is not fatal will use first backend. + } + } + } - /** - * Does backend initialization. - * - * @param backendProperties - * @param globalProperties - * @throws Exception - */ - @SuppressWarnings("unchecked") - private void initPlugin(Properties backendProperties, - Properties globalProperties, String type) throws Exception { + private void initDirtyState(Properties globalProp) { + String useDirty = globalProp.getProperty(CONFIG_DIRTY); + if (Boolean.parseBoolean(useDirty)) { + configuration.useDirty = true; + } - IPlugin plugin = null; + if (logger.isInfoEnabled()) { + logger.info("Use dirty state: " + configuration.useDirty); //$NON-NLS-1$ + logger.info(INFO_DEFAULT_BACKEND + configuration.defaultBackend); + } + } - String location = CONFIG_PLUGIN_BACKEND_IMPL; - if (IPlugin.TYPE_REQUEST_PROCESSOR.equals(type)) { - location = CONFIG_PLUGIN_PROCESSOR_IMPL; - } + /** + * Get and create instantiation listener from configuration file. + * + * @param globalProp + * @throws ClassNotFoundException + * @throws InstantiationException + * @throws IllegalAccessException + */ - if (instantiationListener != null) { - // Try to create class using listener - plugin = (IPlugin) instantiationListener - .getInstance((String) backendProperties.get(location)); - } + private void initInstantiationListener(Properties globalProp) throws ClassNotFoundException, + InstantiationException, IllegalAccessException { + String clazz = globalProp.getProperty(CONFIG_INSTANTIATION_LISTENER); + if (!StringUtils.isEmpty(clazz)) { + @SuppressWarnings("unchecked") + Class<IObjectInstantiationListener> backClazz = (Class<IObjectInstantiationListener>) Class.forName(clazz); - if (plugin == null) { - // backend is still null, try to create it. + // Create new instance + instantiationListener = backClazz.newInstance(); + instantiationListener.setServletContext(servletContext); + logger.info("Using instantiation listener {}", clazz); //$NON-NLS-1$ + } + } - // Get class - String clazz = (String) backendProperties.get(location); - Class<IPlugin> backClazz = (Class<IPlugin>) Class.forName(clazz); + /** + * Does backend initialization. + * + * @param backendProperties + * @param globalProperties + * @throws Exception + */ + @SuppressWarnings("unchecked") + private void initPlugin(Properties backendProperties, Properties globalProperties, String type) throws Exception { - // Create new instance - plugin = backClazz.newInstance(); - } + IPlugin plugin = null; - // Load configuration from global. - HashMap<String, String> conf = new HashMap<String, String>(); - String paramName = null; - String prefix = null; - String attrName = null; - for (Object key : globalProperties.keySet()) { - paramName = (String) key; - prefix = plugin.getId() + DOT; - if (paramName.startsWith(prefix)) { - attrName = paramName.substring(prefix.length()); - conf.put(attrName, globalProperties.getProperty(paramName)); - } - } + String location = CONFIG_PLUGIN_BACKEND_IMPL; + if (IPlugin.TYPE_REQUEST_PROCESSOR.equals(type)) { + location = CONFIG_PLUGIN_PROCESSOR_IMPL; + } - // Init backend - plugin.init(conf); + if (instantiationListener != null) { + // Try to create class using listener + plugin = (IPlugin) instantiationListener.getInstance((String) backendProperties.get(location)); + } - // Toggle buffering on if necessary - if (plugin.isBufferingRequired()) { - configuration.isBufferingRequired = true; - if (logger.isInfoEnabled()) { - logger.info("Plugin " + plugin.getId() + INFO_BUFFERING); - } - } + if (plugin == null) { + // backend is still null, try to create it. - // Specific handling for request processors - if (IPlugin.TYPE_REQUEST_PROCESSOR.equals(type)) { - configuration.requestProcessors.add((IRequestProcessor) plugin); + // Get class + String clazz = (String) backendProperties.get(location); + Class<IPlugin> backClazz = (Class<IPlugin>) Class.forName(clazz); - // Some info output. - if (logger.isInfoEnabled()) { - logger.info(INFO_REQUEST_PROCESSOR + plugin.getId() - + INFO_READY); - } - } + // Create new instance + plugin = backClazz.newInstance(); + } - // Specific handling for backends - if (IPlugin.TYPE_BACKEND.equals(type)) { - configuration.backends - .put(plugin.getId(), (ISessionBackend) plugin); + // Load configuration from global. + HashMap<String, String> conf = new HashMap<String, String>(); + String paramName = null; + String prefix = null; + String attrName = null; + for (Object key : globalProperties.keySet()) { + paramName = (String) key; + prefix = plugin.getId() + DOT; + if (paramName.startsWith(prefix)) { + attrName = paramName.substring(prefix.length()); + conf.put(attrName, globalProperties.getProperty(paramName)); + } + } - // Some info output. - if (logger.isInfoEnabled()) { - logger.info(INFO_BACKEND + plugin.getId() + INFO_READY); - } + // Init backend + plugin.init(conf); - // First backend is default. - if (StringUtils.isEmpty(configuration.defaultBackend)) { - configuration.defaultBackend = plugin.getId(); - } - } + // Toggle buffering on if necessary + applyBuffering(plugin.isBufferingRequired(), plugin.getId()); - } + // Specific handling for request processors + if (IPlugin.TYPE_REQUEST_PROCESSOR.equals(type)) { + configuration.requestProcessors.add((IRequestProcessor) plugin); - /** - * Check if this request is excluded from the process. - * - * @param httpRequest - * HTTP request - * @return true if the URI requested match an excluded pattern - */ - private boolean isExcluded(HttpServletRequest httpRequest) { - if (this.excludePatterns == null) { - return false; - } + // Some info output. + if (logger.isInfoEnabled()) { + logger.info(INFO_REQUEST_PROCESSOR + plugin.getId() + INFO_READY); + } + } - String uri = httpRequest.getRequestURI(); - if (logger.isDebugEnabled()) { - logger.debug("Check URI : " + uri); - } + // Specific handling for backends + if (IPlugin.TYPE_BACKEND.equals(type)) { + configuration.backends.put(plugin.getId(), (ISessionBackend) plugin); - try { - uri = new URI(uri).normalize().toString(); + // Some info output. + if (logger.isInfoEnabled()) { + logger.info(INFO_BACKEND + plugin.getId() + INFO_READY); + } - for (Pattern pattern : this.excludePatterns) { - if (pattern.matcher(uri).matches()) { - if (logger.isInfoEnabled()) { - logger.info("URI excluded : " + uri); - } - return true; - } - } + // First backend is default. + if (StringUtils.isEmpty(configuration.defaultBackend)) { + configuration.defaultBackend = plugin.getId(); + } + } - } catch (URISyntaxException e) { - logger.warn( - "The following URI has a bad syntax. The request will be processed by the filter. URI : " - + uri, e); - } + } - return false; - } + /** + * Check if this request is excluded from the process. + * + * @param httpRequest + * HTTP request + * @return true if the URI requested match an excluded pattern + */ + private boolean isExcluded(HttpServletRequest httpRequest) { + if (this.excludePatterns == null) { + return false; + } + + String uri = httpRequest.getRequestURI(); + if (logger.isDebugEnabled()) { + logger.debug("Check URI : " + uri); + } + + try { + uri = new URI(uri).normalize().toString(); + + for (Pattern pattern : this.excludePatterns) { + if (pattern.matcher(uri).matches()) { + if (logger.isInfoEnabled()) { + logger.info("URI excluded : " + uri); + } + return true; + } + } + + } catch (URISyntaxException e) { + logger.warn( + "The following URI has a bad syntax. The request will be processed by the filter. URI : " + uri, e); + } + + return false; + } } Modified: trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/session/StatelessSession.java =================================================================== --- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/session/StatelessSession.java 2011-06-15 10:39:12 UTC (rev 81) +++ trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/session/StatelessSession.java 2011-07-24 21:51:13 UTC (rev 82) @@ -39,7 +39,6 @@ * @author Nicolas Richeton - Capgemini * */ -@SuppressWarnings("deprecation") public class StatelessSession implements HttpSession, Serializable { final private static String SECURE_ALGORITHM = "SHA1PRNG"; //$NON-NLS-1$ Modified: trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/wrappers/StatelessRequestWrapper.java =================================================================== --- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/wrappers/StatelessRequestWrapper.java 2011-06-15 10:39:12 UTC (rev 81) +++ trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/wrappers/StatelessRequestWrapper.java 2011-07-24 21:51:13 UTC (rev 82) @@ -42,269 +42,258 @@ * */ public class StatelessRequestWrapper extends HttpServletRequestWrapper { - private static final String INFO_USES = "{} uses {}"; //$NON-NLS-1$ - private static final String INFO_USES_DEFAULT = "{} uses default {}"; //$NON-NLS-1$ - // private static final String WARN_SESSION_SYNC = "Session are not synchronized between backends. Reseting..."; //$NON-NLS-1$ - Configuration backends = null; - Logger logger = LoggerFactory.getLogger(StatelessRequestWrapper.class); - HttpServletRequest originalRequest = null; + private static final String INFO_USES = "{} uses {}"; //$NON-NLS-1$ + private static final String INFO_USES_DEFAULT = "{} uses default {}"; //$NON-NLS-1$ + // private static final String WARN_SESSION_SYNC = "Session are not synchronized between backends. Reseting..."; //$NON-NLS-1$ + Configuration backends = null; + Logger logger = LoggerFactory.getLogger(StatelessRequestWrapper.class); + HttpServletRequest originalRequest = null; - StatelessSession session = null; + StatelessSession session = null; + private boolean sessionWritten; - /** - * Create a new request wrapper. - * - * @param request - * @param backends - */ - public StatelessRequestWrapper(HttpServletRequest request, - Configuration backends) { - super(request); - originalRequest = request; - this.backends = backends; - } + public boolean isSessionWritten() { + return sessionWritten; + } - /** - * Returns real server session. - * - * @return - */ - public HttpSession getServerSession() { - return super.getSession(); - } + /** + * Create a new request wrapper. + * + * @param request + * @param backends + */ + public StatelessRequestWrapper(HttpServletRequest request, Configuration backends) { + super(request); + originalRequest = request; + this.backends = backends; + } - /** - * (non-Javadoc) - * - * @see javax.servlet.http.HttpServletRequestWrapper#getSession() - */ - @Override - public HttpSession getSession() { - if (session == null) { - try { - session = createSession(); - } catch (NoSuchAlgorithmException e) { - throw new RuntimeException(e); - } - } - return session; - } + /** + * Returns real server session. + * + * @return + */ + public HttpSession getServerSession() { + return super.getSession(); + } - /** - * (non-Javadoc) - * - * @see javax.servlet.http.HttpServletRequestWrapper#getSession(boolean) - */ - @Override - public HttpSession getSession(boolean create) { - if (create) { - return getSession(); - } + /** + * (non-Javadoc) + * + * @see javax.servlet.http.HttpServletRequestWrapper#getSession() + */ + @Override + public HttpSession getSession() { + if (session == null) { + try { + session = createSession(); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + } + } + return session; + } - if (session == null) { - try { - session = restoreSession(); - } catch (NoSuchAlgorithmException e) { - throw new RuntimeException(e); - } - } + /** + * (non-Javadoc) + * + * @see javax.servlet.http.HttpServletRequestWrapper#getSession(boolean) + */ + @Override + public HttpSession getSession(boolean create) { + if (create) { + return getSession(); + } - return session; - } + if (session == null) { + try { + session = restoreSession(); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + } + } - /** - * Stores session in backends - * - * @param myrequest - * @param myresponse - * @throws IOException - */ - public void writeSession(HttpServletRequest myrequest, - HttpServletResponse myresponse) throws IOException { + return session; + } - // If there is a session (session requested by the application) - if (session != null) { + /** + * Stores session in backends + * + * @param myrequest + * @param myresponse + * @throws IOException + */ + public void writeSession(HttpServletRequest myrequest, HttpServletResponse myresponse) throws IOException { - // Session has changed ? - if (backends.useDirty && !session.isDirty()) { - logger.info("Session has not changed."); //$NON-NLS-1$ - return; - } + // If there is a session (session requested by the application) + if (session != null) { - long requestId = System.currentTimeMillis(); - session.setNew(false); + // Session has changed ? + if (backends.useDirty && !session.isDirty()) { + logger.info("Session has not changed."); //$NON-NLS-1$ + return; + } - // Dispatch attributes between backends according to configuration + long requestId = System.currentTimeMillis(); + session.setNew(false); - // Session attributes - Map<String, Object> sessionAttributes = session.getContent(); - // Session attributes which were modified during the request - List<String> modifiedAttributes = session.getDirtyAttributes(); + // Dispatch attributes between backends according to configuration - // Backends flagged as dirty during dispatch - List<String> modifiedBackends = new ArrayList<String>(); + // Session attributes + Map<String, Object> sessionAttributes = session.getContent(); + // Session attributes which were modified during the request + List<String> modifiedAttributes = session.getDirtyAttributes(); - // Remaining modified attributes to process - List<String> remainingModifiedAttributes = new ArrayList<String>( - modifiedAttributes); - // Attributes for each backend - Map<String, ISessionData> attributesDispatched = new HashMap<String, ISessionData>(); - Map<String, List<String>> modifiedAttributesDispatched = new HashMap<String, List<String>>(); + // Backends flagged as dirty during dispatch + List<String> modifiedBackends = new ArrayList<String>(); - for (String name : sessionAttributes.keySet()) { - if (isAttributeMapped(name)) { - getBackendSessionData(attributesDispatched, - backends.backendsAttributeMapping.get(name), - requestId).getContent().put(name, - sessionAttributes.get(name)); + // Remaining modified attributes to process + List<String> remainingModifiedAttributes = new ArrayList<String>(modifiedAttributes); + // Attributes for each backend + Map<String, ISessionData> attributesDispatched = new HashMap<String, ISessionData>(); + Map<String, List<String>> modifiedAttributesDispatched = new HashMap<String, List<String>>(); - setModified(modifiedBackends, modifiedAttributes, name); + for (String name : sessionAttributes.keySet()) { + if (isAttributeMapped(name)) { + getBackendSessionData(attributesDispatched, backends.backendsAttributeMapping.get(name), requestId) + .getContent().put(name, sessionAttributes.get(name)); - logger.info(INFO_USES, name, - backends.backendsAttributeMapping.get(name)); + setModified(modifiedBackends, modifiedAttributes, name); -... [truncated message content] |
From: <nri...@us...> - 2011-06-15 10:39:18
|
Revision: 81 http://statelessfilter.svn.sourceforge.net/statelessfilter/?rev=81&view=rev Author: nricheton Date: 2011-06-15 10:39:12 +0000 (Wed, 15 Jun 2011) Log Message: ----------- Added comments Modified Paths: -------------- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/backend/support/CookieBackendSupport.java Modified: trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/backend/support/CookieBackendSupport.java =================================================================== --- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/backend/support/CookieBackendSupport.java 2011-03-19 15:07:44 UTC (rev 80) +++ trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/backend/support/CookieBackendSupport.java 2011-06-15 10:39:12 UTC (rev 81) @@ -32,15 +32,52 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * An helper class for backend implementations which are using cookies to store + * data. + * + * <p> + * Includes standard cookies attributes parameters (domain / name, maxAge, path) + * and implements cookie creation and reading. + * + * <p> + * If cookie data is over 3k, it is automatically split into several cookies. + * <p> + * Default values are : + * <ul> + * <li>cookieName : "session"</li> + * <li>domain : default</li> + * <li>maxAge : unlimited</li> + * <li>path : "/"</li> + * </ul> + * + * @author Nicolas Richeton + * + */ public abstract class CookieBackendSupport implements ISessionBackend { + /** + * If cookie data exceed this value, multiple cookie are created. + */ private static final int COOKIE_MAX_SIZE = 3000; private static Logger logger = LoggerFactory .getLogger(CookieBackendSupport.class); + + /* Constants used in properties */ private static final String PARAM_COOKIEDOMAIN = "cookiedomain"; //$NON-NLS-1$ private static final String PARAM_COOKIEMAXAGE = "cookiemaxage"; //$NON-NLS-1$ private static final String PARAM_COOKIENAME = "cookiename"; //$NON-NLS-1$ private static final String PARAM_COOKIEPATH = "cookiepath"; //$NON-NLS-1$ + + /** + * Constant used to store the number of cookie segment within a single + * request. This information is used for cleaning. + * + * <p>Constant value depends of the cookie name. + * @see CookieBackendSupport#setCookieName(String) + */ private String ATTR_COUNT = "stateless.session.count"; //$NON-NLS-1$ + + /* Default values */ protected String cookieName = "session"; //$NON-NLS-1$ protected String domain = null; protected Integer maxAge = null; @@ -57,24 +94,30 @@ abstract public String getId(); /** - * Implements cookie name configuration. + * Read cookie configuration : name, path, domain and maxAge. * * @see net.sourceforge.statelessfilter.backend.ISessionBackend#init(java.util.Map) */ public void init(Map<String, String> config) throws Exception { + // Name String name = config.get(PARAM_COOKIENAME); if (!StringUtils.isEmpty(name)) { setCookieName(name); } + // Path String path = config.get(PARAM_COOKIEPATH); if (!StringUtils.isEmpty(path)) { this.path = path; } + + // Domain String domain = config.get(PARAM_COOKIEDOMAIN); if (!StringUtils.isEmpty(domain)) { this.domain = domain; } + + // MaxAge String maxAge = config.get(PARAM_COOKIEMAXAGE); if (!StringUtils.isEmpty(maxAge)) { this.maxAge = new Integer(Integer.parseInt(maxAge)); @@ -83,6 +126,9 @@ } /** + * Always true for cookies since we need to create cookie at the end of the + * request, when data has already been sent. + * * @see net.sourceforge.statelessfilter.backend.ISessionBackend#isBufferingRequired() */ public boolean isBufferingRequired() { @@ -94,9 +140,10 @@ */ abstract public ISessionData restore(HttpServletRequest request); - /** - * @see net.sourceforge.statelessfilter.backend.ISessionBackend#save(net.sourceforge.statelessfilter.backend.ISessionData, java.util.List, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) + * @see net.sourceforge.statelessfilter.backend.ISessionBackend#save(net.sourceforge.statelessfilter.backend.ISessionData, + * java.util.List, javax.servlet.http.HttpServletRequest, + * javax.servlet.http.HttpServletResponse) */ abstract public void save(ISessionData session, List<String> dirtyAttributes, HttpServletRequest request, @@ -135,6 +182,13 @@ return null; } + /** + * Read raw data from cookie. + * + * @param request + * @param response + * @return + */ protected byte[] getCookieData(HttpServletRequest request, HttpServletResponse response) { int i = 0; @@ -156,8 +210,11 @@ } /** - * Set cookie. Data is split in several cookies if it exceeds max cookie - * length. + * Set raw data in a cookie. Data is split in several cookies if it exceeds + * max cookie length. + * <p> + * Also ensure that the reponse cannot be cached (Cache-control header set + * to private/no-cache/no-store/must-revalidate) * * @param request * @param response @@ -166,8 +223,9 @@ protected void setCookieData(HttpServletRequest request, HttpServletResponse response, byte[] data) { // As soon as we send a session cookie, the response must not be cached. - response.setHeader("Cache-Control", "private, no-cache, no-store, must-revalidate"); - + response.setHeader("Cache-Control", + "private, no-cache, no-store, must-revalidate"); + String encoded = StringUtils.EMPTY; if (data != null) { encoded = new String(Base64.encodeBase64(data)); @@ -198,12 +256,17 @@ response.addCookie(c); i++; } - - + } + /** + * Set the name of the cookie and update internal values accordingly. + * @param cookieName + */ protected void setCookieName(String cookieName) { this.cookieName = cookieName; + + // Update constant to inclue cookie name. ATTR_COUNT = "stateless." + cookieName + ".count"; //$NON-NLS-1$ //$NON-NLS-2$ } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nri...@us...> - 2011-03-19 15:07:50
|
Revision: 80 http://statelessfilter.svn.sourceforge.net/statelessfilter/?rev=80&view=rev Author: nricheton Date: 2011-03-19 15:07:44 +0000 (Sat, 19 Mar 2011) Log Message: ----------- [maven-release-plugin] prepare for next development iteration Modified Paths: -------------- trunk/pom.xml trunk/stateless-cookie-aes/pom.xml trunk/stateless-cookie-aes-json/pom.xml trunk/stateless-cookie-plain/pom.xml trunk/stateless-core/pom.xml trunk/stateless-memcache/pom.xml trunk/stateless-processor-cookie/pom.xml trunk/stateless-session/pom.xml Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2011-03-19 15:07:27 UTC (rev 79) +++ trunk/pom.xml 2011-03-19 15:07:44 UTC (rev 80) @@ -4,7 +4,7 @@ <artifactId>stateless-parent</artifactId> <packaging>pom</packaging> <name>Stateless filter</name> - <version>0.7</version> + <version>0.8-SNAPSHOT</version> <inceptionYear>2009</inceptionYear> <mailingLists> <mailingList> @@ -49,9 +49,9 @@ </developer> </developers> <scm> - <connection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/tags/stateless-parent-0.7</connection> - <developerConnection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/tags/stateless-parent-0.7</developerConnection> - <url>http://statelessfilter.svn.sourceforge.net/viewvc/statelessfilter/tags/stateless-parent-0.7</url> + <connection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/trunk</connection> + <developerConnection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/trunk</developerConnection> + <url>http://statelessfilter.svn.sourceforge.net/viewvc/statelessfilter/trunk/</url> </scm> <build> <plugins> Modified: trunk/stateless-cookie-aes/pom.xml =================================================================== --- trunk/stateless-cookie-aes/pom.xml 2011-03-19 15:07:27 UTC (rev 79) +++ trunk/stateless-cookie-aes/pom.xml 2011-03-19 15:07:44 UTC (rev 80) @@ -2,19 +2,19 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.7</version> + <version>0.8-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-cookie-aes</artifactId> <name>Store: AES cookie</name> - <version>0.7</version> + <version>0.8-SNAPSHOT</version> <dependencies> <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.7</version> + <version>0.8-SNAPSHOT</version> </dependency> <dependency> <groupId>javax.servlet</groupId> Modified: trunk/stateless-cookie-aes-json/pom.xml =================================================================== --- trunk/stateless-cookie-aes-json/pom.xml 2011-03-19 15:07:27 UTC (rev 79) +++ trunk/stateless-cookie-aes-json/pom.xml 2011-03-19 15:07:44 UTC (rev 80) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.7</version> + <version>0.8-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-cookie-aes-json</artifactId> <name>Store: AES+JSON cookie</name> - <version>0.7</version> + <version>0.8-SNAPSHOT</version> <build> <plugins> <plugin> @@ -27,7 +27,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.7</version> + <version>0.8-SNAPSHOT</version> <scope>compile</scope> </dependency> <dependency> Modified: trunk/stateless-cookie-plain/pom.xml =================================================================== --- trunk/stateless-cookie-plain/pom.xml 2011-03-19 15:07:27 UTC (rev 79) +++ trunk/stateless-cookie-plain/pom.xml 2011-03-19 15:07:44 UTC (rev 80) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.7</version> + <version>0.8-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-cookie-plain</artifactId> <name>Store: Plain cookie</name> - <version>0.7</version> + <version>0.8-SNAPSHOT</version> <build> <plugins> </plugins> @@ -17,7 +17,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.7</version> + <version>0.8-SNAPSHOT</version> <type>jar</type> <scope>compile</scope> </dependency> Modified: trunk/stateless-core/pom.xml =================================================================== --- trunk/stateless-core/pom.xml 2011-03-19 15:07:27 UTC (rev 79) +++ trunk/stateless-core/pom.xml 2011-03-19 15:07:44 UTC (rev 80) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.7</version> + <version>0.8-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> <name>Core</name> - <version>0.7</version> + <version>0.8-SNAPSHOT</version> <build> <plugins> Modified: trunk/stateless-memcache/pom.xml =================================================================== --- trunk/stateless-memcache/pom.xml 2011-03-19 15:07:27 UTC (rev 79) +++ trunk/stateless-memcache/pom.xml 2011-03-19 15:07:44 UTC (rev 80) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.7</version> + <version>0.8-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-memcache</artifactId> <name>Store: Memcache</name> - <version>0.7</version> + <version>0.8-SNAPSHOT</version> <build> <plugins> </plugins> @@ -17,7 +17,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.7</version> + <version>0.8-SNAPSHOT</version> <scope>compile</scope> </dependency> <dependency> <groupId>spy</groupId> Modified: trunk/stateless-processor-cookie/pom.xml =================================================================== --- trunk/stateless-processor-cookie/pom.xml 2011-03-19 15:07:27 UTC (rev 79) +++ trunk/stateless-processor-cookie/pom.xml 2011-03-19 15:07:44 UTC (rev 80) @@ -3,19 +3,19 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.7</version> + <version>0.8-SNAPSHOT</version> </parent> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-processor-cookie</artifactId> <name>Request Processor : Cookie</name> - <version>0.7</version> + <version>0.8-SNAPSHOT</version> <description>Persist request attributes to a cookie. id: processor-cookie</description> <dependencies> <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.7</version> + <version>0.8-SNAPSHOT</version> <scope>compile</scope> </dependency> <dependency> Modified: trunk/stateless-session/pom.xml =================================================================== --- trunk/stateless-session/pom.xml 2011-03-19 15:07:27 UTC (rev 79) +++ trunk/stateless-session/pom.xml 2011-03-19 15:07:44 UTC (rev 80) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.7</version> + <version>0.8-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-session</artifactId> <name>Store: Native Session</name> - <version>0.7</version> + <version>0.8-SNAPSHOT</version> <build> <plugins> </plugins> @@ -17,7 +17,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.7</version> + <version>0.8-SNAPSHOT</version> <scope>compile</scope> </dependency> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nri...@us...> - 2011-03-19 15:07:33
|
Revision: 79 http://statelessfilter.svn.sourceforge.net/statelessfilter/?rev=79&view=rev Author: nricheton Date: 2011-03-19 15:07:27 +0000 (Sat, 19 Mar 2011) Log Message: ----------- [maven-scm] copy for tag stateless-parent-0.7 Added Paths: ----------- tags/stateless-parent-0.7/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nri...@us...> - 2011-03-19 15:07:08
|
Revision: 78 http://statelessfilter.svn.sourceforge.net/statelessfilter/?rev=78&view=rev Author: nricheton Date: 2011-03-19 15:07:02 +0000 (Sat, 19 Mar 2011) Log Message: ----------- [maven-release-plugin] prepare release stateless-parent-0.7 Modified Paths: -------------- trunk/pom.xml trunk/stateless-cookie-aes/pom.xml trunk/stateless-cookie-aes-json/pom.xml trunk/stateless-cookie-plain/pom.xml trunk/stateless-core/pom.xml trunk/stateless-memcache/pom.xml trunk/stateless-processor-cookie/pom.xml trunk/stateless-session/pom.xml Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2011-03-18 16:50:39 UTC (rev 77) +++ trunk/pom.xml 2011-03-19 15:07:02 UTC (rev 78) @@ -4,7 +4,7 @@ <artifactId>stateless-parent</artifactId> <packaging>pom</packaging> <name>Stateless filter</name> - <version>0.7-SNAPSHOT</version> + <version>0.7</version> <inceptionYear>2009</inceptionYear> <mailingLists> <mailingList> @@ -49,9 +49,9 @@ </developer> </developers> <scm> - <connection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/trunk</connection> - <developerConnection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/trunk</developerConnection> - <url>http://statelessfilter.svn.sourceforge.net/viewvc/statelessfilter/trunk/</url> + <connection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/tags/stateless-parent-0.7</connection> + <developerConnection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/tags/stateless-parent-0.7</developerConnection> + <url>http://statelessfilter.svn.sourceforge.net/viewvc/statelessfilter/tags/stateless-parent-0.7</url> </scm> <build> <plugins> Modified: trunk/stateless-cookie-aes/pom.xml =================================================================== --- trunk/stateless-cookie-aes/pom.xml 2011-03-18 16:50:39 UTC (rev 77) +++ trunk/stateless-cookie-aes/pom.xml 2011-03-19 15:07:02 UTC (rev 78) @@ -2,19 +2,19 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.7-SNAPSHOT</version> + <version>0.7</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-cookie-aes</artifactId> <name>Store: AES cookie</name> - <version>0.7-SNAPSHOT</version> + <version>0.7</version> <dependencies> <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.7-SNAPSHOT</version> + <version>0.7</version> </dependency> <dependency> <groupId>javax.servlet</groupId> Modified: trunk/stateless-cookie-aes-json/pom.xml =================================================================== --- trunk/stateless-cookie-aes-json/pom.xml 2011-03-18 16:50:39 UTC (rev 77) +++ trunk/stateless-cookie-aes-json/pom.xml 2011-03-19 15:07:02 UTC (rev 78) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.7-SNAPSHOT</version> + <version>0.7</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-cookie-aes-json</artifactId> <name>Store: AES+JSON cookie</name> - <version>0.7-SNAPSHOT</version> + <version>0.7</version> <build> <plugins> <plugin> @@ -27,7 +27,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.7-SNAPSHOT</version> + <version>0.7</version> <scope>compile</scope> </dependency> <dependency> Modified: trunk/stateless-cookie-plain/pom.xml =================================================================== --- trunk/stateless-cookie-plain/pom.xml 2011-03-18 16:50:39 UTC (rev 77) +++ trunk/stateless-cookie-plain/pom.xml 2011-03-19 15:07:02 UTC (rev 78) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.7-SNAPSHOT</version> + <version>0.7</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-cookie-plain</artifactId> <name>Store: Plain cookie</name> - <version>0.7-SNAPSHOT</version> + <version>0.7</version> <build> <plugins> </plugins> @@ -17,7 +17,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.7-SNAPSHOT</version> + <version>0.7</version> <type>jar</type> <scope>compile</scope> </dependency> Modified: trunk/stateless-core/pom.xml =================================================================== --- trunk/stateless-core/pom.xml 2011-03-18 16:50:39 UTC (rev 77) +++ trunk/stateless-core/pom.xml 2011-03-19 15:07:02 UTC (rev 78) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.7-SNAPSHOT</version> + <version>0.7</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> <name>Core</name> - <version>0.7-SNAPSHOT</version> + <version>0.7</version> <build> <plugins> Modified: trunk/stateless-memcache/pom.xml =================================================================== --- trunk/stateless-memcache/pom.xml 2011-03-18 16:50:39 UTC (rev 77) +++ trunk/stateless-memcache/pom.xml 2011-03-19 15:07:02 UTC (rev 78) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.7-SNAPSHOT</version> + <version>0.7</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-memcache</artifactId> <name>Store: Memcache</name> - <version>0.7-SNAPSHOT</version> + <version>0.7</version> <build> <plugins> </plugins> @@ -17,7 +17,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.7-SNAPSHOT</version> + <version>0.7</version> <scope>compile</scope> </dependency> <dependency> <groupId>spy</groupId> Modified: trunk/stateless-processor-cookie/pom.xml =================================================================== --- trunk/stateless-processor-cookie/pom.xml 2011-03-18 16:50:39 UTC (rev 77) +++ trunk/stateless-processor-cookie/pom.xml 2011-03-19 15:07:02 UTC (rev 78) @@ -3,19 +3,19 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.7-SNAPSHOT</version> + <version>0.7</version> </parent> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-processor-cookie</artifactId> <name>Request Processor : Cookie</name> - <version>0.7-SNAPSHOT</version> + <version>0.7</version> <description>Persist request attributes to a cookie. id: processor-cookie</description> <dependencies> <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.7-SNAPSHOT</version> + <version>0.7</version> <scope>compile</scope> </dependency> <dependency> Modified: trunk/stateless-session/pom.xml =================================================================== --- trunk/stateless-session/pom.xml 2011-03-18 16:50:39 UTC (rev 77) +++ trunk/stateless-session/pom.xml 2011-03-19 15:07:02 UTC (rev 78) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.7-SNAPSHOT</version> + <version>0.7</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-session</artifactId> <name>Store: Native Session</name> - <version>0.7-SNAPSHOT</version> + <version>0.7</version> <build> <plugins> </plugins> @@ -17,7 +17,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.7-SNAPSHOT</version> + <version>0.7</version> <scope>compile</scope> </dependency> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nri...@us...> - 2011-03-18 16:50:46
|
Revision: 77 http://statelessfilter.svn.sourceforge.net/statelessfilter/?rev=77&view=rev Author: nricheton Date: 2011-03-18 16:50:39 +0000 (Fri, 18 Mar 2011) Log Message: ----------- Fix cache issues Modified Paths: -------------- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/backend/support/CookieBackendSupport.java Modified: trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/backend/support/CookieBackendSupport.java =================================================================== --- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/backend/support/CookieBackendSupport.java 2011-02-24 13:10:32 UTC (rev 76) +++ trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/backend/support/CookieBackendSupport.java 2011-03-18 16:50:39 UTC (rev 77) @@ -165,6 +165,9 @@ */ protected void setCookieData(HttpServletRequest request, HttpServletResponse response, byte[] data) { + // As soon as we send a session cookie, the response must not be cached. + response.setHeader("Cache-Control", "private, no-cache, no-store, must-revalidate"); + String encoded = StringUtils.EMPTY; if (data != null) { encoded = new String(Base64.encodeBase64(data)); @@ -195,6 +198,8 @@ response.addCookie(c); i++; } + + } protected void setCookieName(String cookieName) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nri...@us...> - 2011-02-24 13:10:39
|
Revision: 76 http://statelessfilter.svn.sourceforge.net/statelessfilter/?rev=76&view=rev Author: nricheton Date: 2011-02-24 13:10:32 +0000 (Thu, 24 Feb 2011) Log Message: ----------- [maven-release-plugin] prepare for next development iteration Modified Paths: -------------- trunk/pom.xml trunk/stateless-cookie-aes/pom.xml trunk/stateless-cookie-aes-json/pom.xml trunk/stateless-cookie-plain/pom.xml trunk/stateless-core/pom.xml trunk/stateless-memcache/pom.xml trunk/stateless-processor-cookie/pom.xml trunk/stateless-session/pom.xml Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2011-02-24 13:10:19 UTC (rev 75) +++ trunk/pom.xml 2011-02-24 13:10:32 UTC (rev 76) @@ -4,7 +4,7 @@ <artifactId>stateless-parent</artifactId> <packaging>pom</packaging> <name>Stateless filter</name> - <version>0.6.1</version> + <version>0.7-SNAPSHOT</version> <inceptionYear>2009</inceptionYear> <mailingLists> <mailingList> @@ -49,9 +49,9 @@ </developer> </developers> <scm> - <connection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/tags/stateless-parent-0.6.1</connection> - <developerConnection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/tags/stateless-parent-0.6.1</developerConnection> - <url>http://statelessfilter.svn.sourceforge.net/viewvc/statelessfilter/tags/stateless-parent-0.6.1</url> + <connection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/trunk</connection> + <developerConnection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/trunk</developerConnection> + <url>http://statelessfilter.svn.sourceforge.net/viewvc/statelessfilter/trunk/</url> </scm> <build> <plugins> Modified: trunk/stateless-cookie-aes/pom.xml =================================================================== --- trunk/stateless-cookie-aes/pom.xml 2011-02-24 13:10:19 UTC (rev 75) +++ trunk/stateless-cookie-aes/pom.xml 2011-02-24 13:10:32 UTC (rev 76) @@ -2,19 +2,19 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.6.1</version> + <version>0.7-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-cookie-aes</artifactId> <name>Store: AES cookie</name> - <version>0.6.1</version> + <version>0.7-SNAPSHOT</version> <dependencies> <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.6.1</version> + <version>0.7-SNAPSHOT</version> </dependency> <dependency> <groupId>javax.servlet</groupId> Modified: trunk/stateless-cookie-aes-json/pom.xml =================================================================== --- trunk/stateless-cookie-aes-json/pom.xml 2011-02-24 13:10:19 UTC (rev 75) +++ trunk/stateless-cookie-aes-json/pom.xml 2011-02-24 13:10:32 UTC (rev 76) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.6.1</version> + <version>0.7-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-cookie-aes-json</artifactId> <name>Store: AES+JSON cookie</name> - <version>0.6.1</version> + <version>0.7-SNAPSHOT</version> <build> <plugins> <plugin> @@ -27,7 +27,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.6.1</version> + <version>0.7-SNAPSHOT</version> <scope>compile</scope> </dependency> <dependency> Modified: trunk/stateless-cookie-plain/pom.xml =================================================================== --- trunk/stateless-cookie-plain/pom.xml 2011-02-24 13:10:19 UTC (rev 75) +++ trunk/stateless-cookie-plain/pom.xml 2011-02-24 13:10:32 UTC (rev 76) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.6.1</version> + <version>0.7-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-cookie-plain</artifactId> <name>Store: Plain cookie</name> - <version>0.6.1</version> + <version>0.7-SNAPSHOT</version> <build> <plugins> </plugins> @@ -17,7 +17,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.6.1</version> + <version>0.7-SNAPSHOT</version> <type>jar</type> <scope>compile</scope> </dependency> Modified: trunk/stateless-core/pom.xml =================================================================== --- trunk/stateless-core/pom.xml 2011-02-24 13:10:19 UTC (rev 75) +++ trunk/stateless-core/pom.xml 2011-02-24 13:10:32 UTC (rev 76) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.6.1</version> + <version>0.7-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> <name>Core</name> - <version>0.6.1</version> + <version>0.7-SNAPSHOT</version> <build> <plugins> Modified: trunk/stateless-memcache/pom.xml =================================================================== --- trunk/stateless-memcache/pom.xml 2011-02-24 13:10:19 UTC (rev 75) +++ trunk/stateless-memcache/pom.xml 2011-02-24 13:10:32 UTC (rev 76) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.6.1</version> + <version>0.7-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-memcache</artifactId> <name>Store: Memcache</name> - <version>0.6.1</version> + <version>0.7-SNAPSHOT</version> <build> <plugins> </plugins> @@ -17,7 +17,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.6.1</version> + <version>0.7-SNAPSHOT</version> <scope>compile</scope> </dependency> <dependency> <groupId>spy</groupId> Modified: trunk/stateless-processor-cookie/pom.xml =================================================================== --- trunk/stateless-processor-cookie/pom.xml 2011-02-24 13:10:19 UTC (rev 75) +++ trunk/stateless-processor-cookie/pom.xml 2011-02-24 13:10:32 UTC (rev 76) @@ -3,19 +3,19 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.6.1</version> + <version>0.7-SNAPSHOT</version> </parent> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-processor-cookie</artifactId> <name>Request Processor : Cookie</name> - <version>0.6.1</version> + <version>0.7-SNAPSHOT</version> <description>Persist request attributes to a cookie. id: processor-cookie</description> <dependencies> <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.6.1</version> + <version>0.7-SNAPSHOT</version> <scope>compile</scope> </dependency> <dependency> Modified: trunk/stateless-session/pom.xml =================================================================== --- trunk/stateless-session/pom.xml 2011-02-24 13:10:19 UTC (rev 75) +++ trunk/stateless-session/pom.xml 2011-02-24 13:10:32 UTC (rev 76) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.6.1</version> + <version>0.7-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-session</artifactId> <name>Store: Native Session</name> - <version>0.6.1</version> + <version>0.7-SNAPSHOT</version> <build> <plugins> </plugins> @@ -17,7 +17,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.6.1</version> + <version>0.7-SNAPSHOT</version> <scope>compile</scope> </dependency> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nri...@us...> - 2011-02-24 13:10:25
|
Revision: 75 http://statelessfilter.svn.sourceforge.net/statelessfilter/?rev=75&view=rev Author: nricheton Date: 2011-02-24 13:10:19 +0000 (Thu, 24 Feb 2011) Log Message: ----------- [maven-scm] copy for tag stateless-parent-0.6.1 Added Paths: ----------- tags/stateless-parent-0.6.1/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nri...@us...> - 2011-02-24 13:10:07
|
Revision: 74 http://statelessfilter.svn.sourceforge.net/statelessfilter/?rev=74&view=rev Author: nricheton Date: 2011-02-24 13:10:00 +0000 (Thu, 24 Feb 2011) Log Message: ----------- [maven-release-plugin] prepare release stateless-parent-0.6.1 Modified Paths: -------------- trunk/pom.xml trunk/stateless-cookie-aes/pom.xml trunk/stateless-cookie-aes-json/pom.xml trunk/stateless-cookie-plain/pom.xml trunk/stateless-core/pom.xml trunk/stateless-memcache/pom.xml trunk/stateless-processor-cookie/pom.xml trunk/stateless-session/pom.xml Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2011-02-24 13:08:31 UTC (rev 73) +++ trunk/pom.xml 2011-02-24 13:10:00 UTC (rev 74) @@ -4,7 +4,7 @@ <artifactId>stateless-parent</artifactId> <packaging>pom</packaging> <name>Stateless filter</name> - <version>0.7-SNAPSHOT</version> + <version>0.6.1</version> <inceptionYear>2009</inceptionYear> <mailingLists> <mailingList> @@ -49,9 +49,9 @@ </developer> </developers> <scm> - <connection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/trunk</connection> - <developerConnection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/trunk</developerConnection> - <url>http://statelessfilter.svn.sourceforge.net/viewvc/statelessfilter/trunk/</url> + <connection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/tags/stateless-parent-0.6.1</connection> + <developerConnection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/tags/stateless-parent-0.6.1</developerConnection> + <url>http://statelessfilter.svn.sourceforge.net/viewvc/statelessfilter/tags/stateless-parent-0.6.1</url> </scm> <build> <plugins> Modified: trunk/stateless-cookie-aes/pom.xml =================================================================== --- trunk/stateless-cookie-aes/pom.xml 2011-02-24 13:08:31 UTC (rev 73) +++ trunk/stateless-cookie-aes/pom.xml 2011-02-24 13:10:00 UTC (rev 74) @@ -2,19 +2,19 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.7-SNAPSHOT</version> + <version>0.6.1</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-cookie-aes</artifactId> <name>Store: AES cookie</name> - <version>0.7-SNAPSHOT</version> + <version>0.6.1</version> <dependencies> <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.7-SNAPSHOT</version> + <version>0.6.1</version> </dependency> <dependency> <groupId>javax.servlet</groupId> Modified: trunk/stateless-cookie-aes-json/pom.xml =================================================================== --- trunk/stateless-cookie-aes-json/pom.xml 2011-02-24 13:08:31 UTC (rev 73) +++ trunk/stateless-cookie-aes-json/pom.xml 2011-02-24 13:10:00 UTC (rev 74) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.7-SNAPSHOT</version> + <version>0.6.1</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-cookie-aes-json</artifactId> <name>Store: AES+JSON cookie</name> - <version>0.7-SNAPSHOT</version> + <version>0.6.1</version> <build> <plugins> <plugin> @@ -27,7 +27,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.7-SNAPSHOT</version> + <version>0.6.1</version> <scope>compile</scope> </dependency> <dependency> Modified: trunk/stateless-cookie-plain/pom.xml =================================================================== --- trunk/stateless-cookie-plain/pom.xml 2011-02-24 13:08:31 UTC (rev 73) +++ trunk/stateless-cookie-plain/pom.xml 2011-02-24 13:10:00 UTC (rev 74) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.7-SNAPSHOT</version> + <version>0.6.1</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-cookie-plain</artifactId> <name>Store: Plain cookie</name> - <version>0.7-SNAPSHOT</version> + <version>0.6.1</version> <build> <plugins> </plugins> @@ -17,7 +17,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.7-SNAPSHOT</version> + <version>0.6.1</version> <type>jar</type> <scope>compile</scope> </dependency> Modified: trunk/stateless-core/pom.xml =================================================================== --- trunk/stateless-core/pom.xml 2011-02-24 13:08:31 UTC (rev 73) +++ trunk/stateless-core/pom.xml 2011-02-24 13:10:00 UTC (rev 74) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.7-SNAPSHOT</version> + <version>0.6.1</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> <name>Core</name> - <version>0.7-SNAPSHOT</version> + <version>0.6.1</version> <build> <plugins> Modified: trunk/stateless-memcache/pom.xml =================================================================== --- trunk/stateless-memcache/pom.xml 2011-02-24 13:08:31 UTC (rev 73) +++ trunk/stateless-memcache/pom.xml 2011-02-24 13:10:00 UTC (rev 74) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.7-SNAPSHOT</version> + <version>0.6.1</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-memcache</artifactId> <name>Store: Memcache</name> - <version>0.7-SNAPSHOT</version> + <version>0.6.1</version> <build> <plugins> </plugins> @@ -17,7 +17,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.7-SNAPSHOT</version> + <version>0.6.1</version> <scope>compile</scope> </dependency> <dependency> <groupId>spy</groupId> Modified: trunk/stateless-processor-cookie/pom.xml =================================================================== --- trunk/stateless-processor-cookie/pom.xml 2011-02-24 13:08:31 UTC (rev 73) +++ trunk/stateless-processor-cookie/pom.xml 2011-02-24 13:10:00 UTC (rev 74) @@ -3,19 +3,19 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.7-SNAPSHOT</version> + <version>0.6.1</version> </parent> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-processor-cookie</artifactId> <name>Request Processor : Cookie</name> - <version>0.7-SNAPSHOT</version> + <version>0.6.1</version> <description>Persist request attributes to a cookie. id: processor-cookie</description> <dependencies> <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.7-SNAPSHOT</version> + <version>0.6.1</version> <scope>compile</scope> </dependency> <dependency> Modified: trunk/stateless-session/pom.xml =================================================================== --- trunk/stateless-session/pom.xml 2011-02-24 13:08:31 UTC (rev 73) +++ trunk/stateless-session/pom.xml 2011-02-24 13:10:00 UTC (rev 74) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.7-SNAPSHOT</version> + <version>0.6.1</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-session</artifactId> <name>Store: Native Session</name> - <version>0.7-SNAPSHOT</version> + <version>0.6.1</version> <build> <plugins> </plugins> @@ -17,7 +17,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.7-SNAPSHOT</version> + <version>0.6.1</version> <scope>compile</scope> </dependency> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nri...@us...> - 2011-02-24 13:08:37
|
Revision: 73 http://statelessfilter.svn.sourceforge.net/statelessfilter/?rev=73&view=rev Author: nricheton Date: 2011-02-24 13:08:31 +0000 (Thu, 24 Feb 2011) Log Message: ----------- https://sourceforge.net/apps/mantisbt/statelessfilter/view.php?id=23 Modified Paths: -------------- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/session/StatelessSession.java Added Paths: ----------- trunk/stateless-core/src/test/java/net/sourceforge/statelessfilter/filter/Bug23Test.java Modified: trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/session/StatelessSession.java =================================================================== --- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/session/StatelessSession.java 2011-02-23 17:16:06 UTC (rev 72) +++ trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/session/StatelessSession.java 2011-02-24 13:08:31 UTC (rev 73) @@ -41,7 +41,9 @@ */ @SuppressWarnings("deprecation") public class StatelessSession implements HttpSession, Serializable { - final private static String SECURE_ALGORITHM = "SHA1PRNG"; //$NON-NLS-1$ + final private static String SECURE_ALGORITHM = "SHA1PRNG"; //$NON-NLS-1$ + + final private static String NULL_VALUE = "net.sourceforge.statelessfilter.session.NullValue"; /** * Generated serial ID */ @@ -61,17 +63,16 @@ private volatile List<String> modifiedAttributes = new Vector<String>(); /** - * Were this session properties (validity, maxInactiveInterval) modified during the - * current request. + * Were this session properties (validity, maxInactiveInterval) modified + * during the current request. */ private volatile boolean propertyDirty = false; - + /** - * Was this session modified during the current request. + * Was this session modified during the current request. */ private volatile boolean dirty = false; - private final StatelessRequestWrapper request; private boolean valid; @@ -88,7 +89,13 @@ * @see javax.servlet.http.HttpSession#getAttribute(java.lang.String) */ public Object getAttribute(String name) { - return content.get(name); + Object result = content.get(name); + + if (result instanceof String && NULL_VALUE.equals(result)) { + result = null; + } + + return result; } /** @@ -162,7 +169,7 @@ */ @Deprecated public Object getValue(String name) { - return content.get(name); + return getAttribute(name); } /** @@ -264,8 +271,7 @@ */ @Deprecated public void putValue(String name, Object value) { - content.put(name, value); - setAttributeDirty(name); + setAttribute(name, value); } /** @@ -282,8 +288,7 @@ */ @Deprecated public void removeValue(String name) { - content.remove(name); - setAttributeDirty(name); + removeAttribute(name); } /** @@ -291,7 +296,13 @@ * java.lang.Object) */ public void setAttribute(String name, Object value) { - content.put(name, value); + Object toInsert = value; + + if (toInsert == null) { + toInsert = NULL_VALUE; + } + + content.put(name, toInsert); setAttributeDirty(name); } Added: trunk/stateless-core/src/test/java/net/sourceforge/statelessfilter/filter/Bug23Test.java =================================================================== --- trunk/stateless-core/src/test/java/net/sourceforge/statelessfilter/filter/Bug23Test.java (rev 0) +++ trunk/stateless-core/src/test/java/net/sourceforge/statelessfilter/filter/Bug23Test.java 2011-02-24 13:08:31 UTC (rev 73) @@ -0,0 +1,80 @@ +/* + * Copyright 2009-2010 Capgemini + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package net.sourceforge.statelessfilter.filter; + +import java.io.IOException; + +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +import junit.framework.TestCase; +import net.sourceforge.statelessfilter.backend.MockSessionBackend; + +import org.springframework.mock.web.MockFilterChain; +import org.springframework.mock.web.MockFilterConfig; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; + +/** + * Tests for bug + * https://sourceforge.net/apps/mantisbt/statelessfilter/view.php?id=23 + * + * @author Nicolas Richeton - Capgemini + * + */ +public class Bug23Test extends TestCase { + Object sessionValue ="shouldBeNull"; + + public void testSetNull() throws IOException, ServletException { + MockSessionBackend.reset(); + + StatelessFilter filter = new StatelessFilter(); + MockFilterConfig config = new MockFilterConfig(); + filter.init(config); + + MockHttpServletRequest request = new MockHttpServletRequest(); + MockHttpServletResponse response = new MockHttpServletResponse(); + + + MockFilterChain chain = new MockFilterChain() { + + @Override + public void doFilter(ServletRequest request, + ServletResponse response) { + super.doFilter(request, response); + + HttpServletRequest httpRequest = (HttpServletRequest) request; + HttpSession session = httpRequest.getSession(); + session.setAttribute("null", null); + + sessionValue = session.getAttribute("null"); + } + + }; + + filter.doFilter(request, response, chain); + + + + assertTrue(MockSessionBackend.getContent().getContent() + .containsKey("null")); + assertNull ( sessionValue ); + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nri...@us...> - 2011-02-23 17:16:13
|
Revision: 72 http://statelessfilter.svn.sourceforge.net/statelessfilter/?rev=72&view=rev Author: nricheton Date: 2011-02-23 17:16:06 +0000 (Wed, 23 Feb 2011) Log Message: ----------- [maven-release-plugin] prepare for next development iteration Modified Paths: -------------- trunk/pom.xml trunk/stateless-cookie-aes/pom.xml trunk/stateless-cookie-aes-json/pom.xml trunk/stateless-cookie-plain/pom.xml trunk/stateless-core/pom.xml trunk/stateless-memcache/pom.xml trunk/stateless-processor-cookie/pom.xml trunk/stateless-session/pom.xml Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2011-02-23 17:15:52 UTC (rev 71) +++ trunk/pom.xml 2011-02-23 17:16:06 UTC (rev 72) @@ -4,7 +4,7 @@ <artifactId>stateless-parent</artifactId> <packaging>pom</packaging> <name>Stateless filter</name> - <version>0.6</version> + <version>0.7-SNAPSHOT</version> <inceptionYear>2009</inceptionYear> <mailingLists> <mailingList> @@ -49,9 +49,9 @@ </developer> </developers> <scm> - <connection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/tags/stateless-parent-0.6</connection> - <developerConnection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/tags/stateless-parent-0.6</developerConnection> - <url>http://statelessfilter.svn.sourceforge.net/viewvc/statelessfilter/tags/stateless-parent-0.6</url> + <connection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/trunk</connection> + <developerConnection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/trunk</developerConnection> + <url>http://statelessfilter.svn.sourceforge.net/viewvc/statelessfilter/trunk/</url> </scm> <build> <plugins> Modified: trunk/stateless-cookie-aes/pom.xml =================================================================== --- trunk/stateless-cookie-aes/pom.xml 2011-02-23 17:15:52 UTC (rev 71) +++ trunk/stateless-cookie-aes/pom.xml 2011-02-23 17:16:06 UTC (rev 72) @@ -2,19 +2,19 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.6</version> + <version>0.7-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-cookie-aes</artifactId> <name>Store: AES cookie</name> - <version>0.6</version> + <version>0.7-SNAPSHOT</version> <dependencies> <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.6</version> + <version>0.7-SNAPSHOT</version> </dependency> <dependency> <groupId>javax.servlet</groupId> Modified: trunk/stateless-cookie-aes-json/pom.xml =================================================================== --- trunk/stateless-cookie-aes-json/pom.xml 2011-02-23 17:15:52 UTC (rev 71) +++ trunk/stateless-cookie-aes-json/pom.xml 2011-02-23 17:16:06 UTC (rev 72) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.6</version> + <version>0.7-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-cookie-aes-json</artifactId> <name>Store: AES+JSON cookie</name> - <version>0.6</version> + <version>0.7-SNAPSHOT</version> <build> <plugins> <plugin> @@ -27,7 +27,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.6</version> + <version>0.7-SNAPSHOT</version> <scope>compile</scope> </dependency> <dependency> Modified: trunk/stateless-cookie-plain/pom.xml =================================================================== --- trunk/stateless-cookie-plain/pom.xml 2011-02-23 17:15:52 UTC (rev 71) +++ trunk/stateless-cookie-plain/pom.xml 2011-02-23 17:16:06 UTC (rev 72) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.6</version> + <version>0.7-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-cookie-plain</artifactId> <name>Store: Plain cookie</name> - <version>0.6</version> + <version>0.7-SNAPSHOT</version> <build> <plugins> </plugins> @@ -17,7 +17,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.6</version> + <version>0.7-SNAPSHOT</version> <type>jar</type> <scope>compile</scope> </dependency> Modified: trunk/stateless-core/pom.xml =================================================================== --- trunk/stateless-core/pom.xml 2011-02-23 17:15:52 UTC (rev 71) +++ trunk/stateless-core/pom.xml 2011-02-23 17:16:06 UTC (rev 72) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.6</version> + <version>0.7-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> <name>Core</name> - <version>0.6</version> + <version>0.7-SNAPSHOT</version> <build> <plugins> Modified: trunk/stateless-memcache/pom.xml =================================================================== --- trunk/stateless-memcache/pom.xml 2011-02-23 17:15:52 UTC (rev 71) +++ trunk/stateless-memcache/pom.xml 2011-02-23 17:16:06 UTC (rev 72) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.6</version> + <version>0.7-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-memcache</artifactId> <name>Store: Memcache</name> - <version>0.6</version> + <version>0.7-SNAPSHOT</version> <build> <plugins> </plugins> @@ -17,7 +17,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.6</version> + <version>0.7-SNAPSHOT</version> <scope>compile</scope> </dependency> <dependency> <groupId>spy</groupId> Modified: trunk/stateless-processor-cookie/pom.xml =================================================================== --- trunk/stateless-processor-cookie/pom.xml 2011-02-23 17:15:52 UTC (rev 71) +++ trunk/stateless-processor-cookie/pom.xml 2011-02-23 17:16:06 UTC (rev 72) @@ -3,19 +3,19 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.6</version> + <version>0.7-SNAPSHOT</version> </parent> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-processor-cookie</artifactId> <name>Request Processor : Cookie</name> - <version>0.6</version> + <version>0.7-SNAPSHOT</version> <description>Persist request attributes to a cookie. id: processor-cookie</description> <dependencies> <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.6</version> + <version>0.7-SNAPSHOT</version> <scope>compile</scope> </dependency> <dependency> Modified: trunk/stateless-session/pom.xml =================================================================== --- trunk/stateless-session/pom.xml 2011-02-23 17:15:52 UTC (rev 71) +++ trunk/stateless-session/pom.xml 2011-02-23 17:16:06 UTC (rev 72) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.6</version> + <version>0.7-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-session</artifactId> <name>Store: Native Session</name> - <version>0.6</version> + <version>0.7-SNAPSHOT</version> <build> <plugins> </plugins> @@ -17,7 +17,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.6</version> + <version>0.7-SNAPSHOT</version> <scope>compile</scope> </dependency> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nri...@us...> - 2011-02-23 17:15:58
|
Revision: 71 http://statelessfilter.svn.sourceforge.net/statelessfilter/?rev=71&view=rev Author: nricheton Date: 2011-02-23 17:15:52 +0000 (Wed, 23 Feb 2011) Log Message: ----------- [maven-scm] copy for tag stateless-parent-0.6 Added Paths: ----------- tags/stateless-parent-0.6/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nri...@us...> - 2011-02-23 17:15:40
|
Revision: 70 http://statelessfilter.svn.sourceforge.net/statelessfilter/?rev=70&view=rev Author: nricheton Date: 2011-02-23 17:15:34 +0000 (Wed, 23 Feb 2011) Log Message: ----------- [maven-release-plugin] prepare release stateless-parent-0.6 Modified Paths: -------------- trunk/pom.xml trunk/stateless-cookie-aes/pom.xml trunk/stateless-cookie-aes-json/pom.xml trunk/stateless-cookie-plain/pom.xml trunk/stateless-core/pom.xml trunk/stateless-memcache/pom.xml trunk/stateless-processor-cookie/pom.xml trunk/stateless-session/pom.xml Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2011-02-23 17:12:12 UTC (rev 69) +++ trunk/pom.xml 2011-02-23 17:15:34 UTC (rev 70) @@ -4,7 +4,7 @@ <artifactId>stateless-parent</artifactId> <packaging>pom</packaging> <name>Stateless filter</name> - <version>0.6-SNAPSHOT</version> + <version>0.6</version> <inceptionYear>2009</inceptionYear> <mailingLists> <mailingList> @@ -49,9 +49,9 @@ </developer> </developers> <scm> - <connection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/trunk</connection> - <developerConnection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/trunk</developerConnection> - <url>http://statelessfilter.svn.sourceforge.net/viewvc/statelessfilter/trunk/</url> + <connection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/tags/stateless-parent-0.6</connection> + <developerConnection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/tags/stateless-parent-0.6</developerConnection> + <url>http://statelessfilter.svn.sourceforge.net/viewvc/statelessfilter/tags/stateless-parent-0.6</url> </scm> <build> <plugins> Modified: trunk/stateless-cookie-aes/pom.xml =================================================================== --- trunk/stateless-cookie-aes/pom.xml 2011-02-23 17:12:12 UTC (rev 69) +++ trunk/stateless-cookie-aes/pom.xml 2011-02-23 17:15:34 UTC (rev 70) @@ -2,19 +2,19 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.6-SNAPSHOT</version> + <version>0.6</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-cookie-aes</artifactId> <name>Store: AES cookie</name> - <version>0.6-SNAPSHOT</version> + <version>0.6</version> <dependencies> <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.6-SNAPSHOT</version> + <version>0.6</version> </dependency> <dependency> <groupId>javax.servlet</groupId> Modified: trunk/stateless-cookie-aes-json/pom.xml =================================================================== --- trunk/stateless-cookie-aes-json/pom.xml 2011-02-23 17:12:12 UTC (rev 69) +++ trunk/stateless-cookie-aes-json/pom.xml 2011-02-23 17:15:34 UTC (rev 70) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.6-SNAPSHOT</version> + <version>0.6</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-cookie-aes-json</artifactId> <name>Store: AES+JSON cookie</name> - <version>0.6-SNAPSHOT</version> + <version>0.6</version> <build> <plugins> <plugin> @@ -27,7 +27,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.6-SNAPSHOT</version> + <version>0.6</version> <scope>compile</scope> </dependency> <dependency> Modified: trunk/stateless-cookie-plain/pom.xml =================================================================== --- trunk/stateless-cookie-plain/pom.xml 2011-02-23 17:12:12 UTC (rev 69) +++ trunk/stateless-cookie-plain/pom.xml 2011-02-23 17:15:34 UTC (rev 70) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.6-SNAPSHOT</version> + <version>0.6</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-cookie-plain</artifactId> <name>Store: Plain cookie</name> - <version>0.6-SNAPSHOT</version> + <version>0.6</version> <build> <plugins> </plugins> @@ -17,7 +17,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.6-SNAPSHOT</version> + <version>0.6</version> <type>jar</type> <scope>compile</scope> </dependency> Modified: trunk/stateless-core/pom.xml =================================================================== --- trunk/stateless-core/pom.xml 2011-02-23 17:12:12 UTC (rev 69) +++ trunk/stateless-core/pom.xml 2011-02-23 17:15:34 UTC (rev 70) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.6-SNAPSHOT</version> + <version>0.6</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> <name>Core</name> - <version>0.6-SNAPSHOT</version> + <version>0.6</version> <build> <plugins> Modified: trunk/stateless-memcache/pom.xml =================================================================== --- trunk/stateless-memcache/pom.xml 2011-02-23 17:12:12 UTC (rev 69) +++ trunk/stateless-memcache/pom.xml 2011-02-23 17:15:34 UTC (rev 70) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.6-SNAPSHOT</version> + <version>0.6</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-memcache</artifactId> <name>Store: Memcache</name> - <version>0.6-SNAPSHOT</version> + <version>0.6</version> <build> <plugins> </plugins> @@ -17,7 +17,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.6-SNAPSHOT</version> + <version>0.6</version> <scope>compile</scope> </dependency> <dependency> <groupId>spy</groupId> Modified: trunk/stateless-processor-cookie/pom.xml =================================================================== --- trunk/stateless-processor-cookie/pom.xml 2011-02-23 17:12:12 UTC (rev 69) +++ trunk/stateless-processor-cookie/pom.xml 2011-02-23 17:15:34 UTC (rev 70) @@ -3,19 +3,19 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.6-SNAPSHOT</version> + <version>0.6</version> </parent> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-processor-cookie</artifactId> <name>Request Processor : Cookie</name> - <version>0.6-SNAPSHOT</version> + <version>0.6</version> <description>Persist request attributes to a cookie. id: processor-cookie</description> <dependencies> <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.6-SNAPSHOT</version> + <version>0.6</version> <scope>compile</scope> </dependency> <dependency> Modified: trunk/stateless-session/pom.xml =================================================================== --- trunk/stateless-session/pom.xml 2011-02-23 17:12:12 UTC (rev 69) +++ trunk/stateless-session/pom.xml 2011-02-23 17:15:34 UTC (rev 70) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.6-SNAPSHOT</version> + <version>0.6</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-session</artifactId> <name>Store: Native Session</name> - <version>0.6-SNAPSHOT</version> + <version>0.6</version> <build> <plugins> </plugins> @@ -17,7 +17,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.6-SNAPSHOT</version> + <version>0.6</version> <scope>compile</scope> </dependency> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nri...@us...> - 2011-02-23 17:12:18
|
Revision: 69 http://statelessfilter.svn.sourceforge.net/statelessfilter/?rev=69&view=rev Author: nricheton Date: 2011-02-23 17:12:12 +0000 (Wed, 23 Feb 2011) Log Message: ----------- http://sourceforge.net/apps/mantisbt/statelessfilter/view.php?id=22 : fixed Modified Paths: -------------- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/wrappers/BufferedHttpResponseWrapper.java trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/wrappers/BufferedServletOutputStream.java Modified: trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/wrappers/BufferedHttpResponseWrapper.java =================================================================== --- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/wrappers/BufferedHttpResponseWrapper.java 2011-02-23 16:26:12 UTC (rev 68) +++ trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/wrappers/BufferedHttpResponseWrapper.java 2011-02-23 17:12:12 UTC (rev 69) @@ -39,22 +39,30 @@ private String location = null; private ServletOutputStream outputStream = null; private PrintWriter printWriter = null; + boolean committed = false; + @Override + public boolean isCommitted() { + if (committed) + return true; + else + return super.isCommitted(); + } + public BufferedHttpResponseWrapper(HttpServletResponse origResponse) { super(origResponse); } @Override public void flushBuffer() throws IOException { - + if (this.outputStream != null) { this.outputStream.flush(); } else if (this.printWriter != null) { this.printWriter.flush(); bufferedServletOut.flush(); } - - + } public byte[] getBuffer() { @@ -134,8 +142,8 @@ public void sendError(int sc) throws IOException { if (location == null) { errorCode = new Integer(sc); - } + committed = true; } @Override @@ -144,6 +152,7 @@ errorCode = new Integer(sc); errorMsg = msg; } + committed = true; } @Override @@ -151,10 +160,14 @@ if (errorCode == null) { this.location = location; } + committed = true; } @Override public void setBufferSize(int size) { + if( this.bufferedServletOut.hasData() ) { + throw new IllegalStateException("Content has already been sent. No Setbuffer allowed"); +} this.bufferedServletOut.setBufferSize(size); } } \ No newline at end of file Modified: trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/wrappers/BufferedServletOutputStream.java =================================================================== --- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/wrappers/BufferedServletOutputStream.java 2011-02-23 16:26:12 UTC (rev 68) +++ trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/wrappers/BufferedServletOutputStream.java 2011-02-23 17:12:12 UTC (rev 69) @@ -28,6 +28,7 @@ public class BufferedServletOutputStream extends ServletOutputStream { // the actual buffer private ByteArrayOutputStream bos = new ByteArrayOutputStream(); + private boolean hasData = false; /** * @return the contents of the buffer. @@ -44,7 +45,7 @@ // BufferedHttpResponseWrapper calls this method public void setBufferSize(int size) { // no way to resize an existing ByteArrayOutputStream - this.bos = new ByteArrayOutputStream(size); + // this.bos = new ByteArrayOutputStream(size); } /** @@ -52,6 +53,14 @@ */ @Override public void write(int data) { + if (!hasData) + hasData = true; this.bos.write(data); + } + + public boolean hasData() { + + return hasData; + } } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nri...@us...> - 2011-02-23 16:26:19
|
Revision: 68 http://statelessfilter.svn.sourceforge.net/statelessfilter/?rev=68&view=rev Author: nricheton Date: 2011-02-23 16:26:12 +0000 (Wed, 23 Feb 2011) Log Message: ----------- https://sourceforge.net/apps/mantisbt/statelessfilter/view.php?id=22 : round 2 Modified Paths: -------------- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/wrappers/BufferedHttpResponseWrapper.java Modified: trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/wrappers/BufferedHttpResponseWrapper.java =================================================================== --- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/wrappers/BufferedHttpResponseWrapper.java 2011-02-23 14:53:46 UTC (rev 67) +++ trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/wrappers/BufferedHttpResponseWrapper.java 2011-02-23 16:26:12 UTC (rev 68) @@ -46,11 +46,15 @@ @Override public void flushBuffer() throws IOException { + if (this.outputStream != null) { this.outputStream.flush(); } else if (this.printWriter != null) { this.printWriter.flush(); + bufferedServletOut.flush(); } + + } public byte[] getBuffer() { @@ -65,37 +69,36 @@ @Override public ServletOutputStream getOutputStream() throws IOException { - synchronized (this) { - if (this.printWriter != null) { - throw new IllegalStateException( - "The Servlet API forbids calling getOutputStream( ) after" //$NON-NLS-1$ - + " getWriter( ) has been called"); //$NON-NLS-1$ - } + if (this.printWriter != null) { + throw new IllegalStateException( + "The Servlet API forbids calling getOutputStream( ) after" //$NON-NLS-1$ + + " getWriter( ) has been called"); //$NON-NLS-1$ + } - if (this.outputStream == null) { - this.outputStream = this.bufferedServletOut; - } + if (this.outputStream == null) { + this.outputStream = this.bufferedServletOut; } + return this.outputStream; } @Override public PrintWriter getWriter() throws IOException { - synchronized (this) { - if (this.outputStream != null) { - throw new IllegalStateException( - "The Servlet API forbids calling getWriter( ) after" //$NON-NLS-1$ - + " getOutputStream( ) has been called"); //$NON-NLS-1$ - } - if (this.printWriter == null) { - // Create writer with the response encoding. - Writer writer = new OutputStreamWriter(this.bufferedServletOut, - this.getResponse().getCharacterEncoding()); + if (this.outputStream != null) { + throw new IllegalStateException( + "The Servlet API forbids calling getWriter( ) after" //$NON-NLS-1$ + + " getOutputStream( ) has been called"); //$NON-NLS-1$ + } - this.printWriter = new PrintWriter(writer); - } + if (this.printWriter == null) { + // Create writer with the response encoding. + Writer writer = new OutputStreamWriter(this.bufferedServletOut, + this.getResponse().getCharacterEncoding()); + + this.printWriter = new PrintWriter(writer); } + return this.printWriter; } @@ -117,6 +120,9 @@ @Override public void reset() { this.bufferedServletOut.reset(); + errorCode = null; + errorMsg = null; + location = null; } @Override This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nri...@us...> - 2011-02-23 14:53:52
|
Revision: 67 http://statelessfilter.svn.sourceforge.net/statelessfilter/?rev=67&view=rev Author: nricheton Date: 2011-02-23 14:53:46 +0000 (Wed, 23 Feb 2011) Log Message: ----------- Fix for tiles issues : round 1 Modified Paths: -------------- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/wrappers/BufferedHttpResponseWrapper.java Modified: trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/wrappers/BufferedHttpResponseWrapper.java =================================================================== --- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/wrappers/BufferedHttpResponseWrapper.java 2011-02-22 17:29:53 UTC (rev 66) +++ trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/wrappers/BufferedHttpResponseWrapper.java 2011-02-23 14:53:46 UTC (rev 67) @@ -64,33 +64,37 @@ @Override public ServletOutputStream getOutputStream() throws IOException { - if (this.printWriter != null) { - throw new IllegalStateException( - "The Servlet API forbids calling getOutputStream( ) after" //$NON-NLS-1$ - + " getWriter( ) has been called"); //$NON-NLS-1$ - } - if (this.outputStream == null) { - this.outputStream = this.bufferedServletOut; + synchronized (this) { + if (this.printWriter != null) { + throw new IllegalStateException( + "The Servlet API forbids calling getOutputStream( ) after" //$NON-NLS-1$ + + " getWriter( ) has been called"); //$NON-NLS-1$ + } + + if (this.outputStream == null) { + this.outputStream = this.bufferedServletOut; + } } return this.outputStream; } @Override public PrintWriter getWriter() throws IOException { - if (this.outputStream != null) { - throw new IllegalStateException( - "The Servlet API forbids calling getWriter( ) after" //$NON-NLS-1$ - + " getOutputStream( ) has been called"); //$NON-NLS-1$ - } + synchronized (this) { + if (this.outputStream != null) { + throw new IllegalStateException( + "The Servlet API forbids calling getWriter( ) after" //$NON-NLS-1$ + + " getOutputStream( ) has been called"); //$NON-NLS-1$ + } - if (this.printWriter == null) { - // Create writer with the response encoding. - Writer writer = new BufferedWriter(new OutputStreamWriter( - this.bufferedServletOut, this.getResponse() - .getCharacterEncoding())); + if (this.printWriter == null) { + // Create writer with the response encoding. + Writer writer = new OutputStreamWriter(this.bufferedServletOut, + this.getResponse().getCharacterEncoding()); - this.printWriter = new PrintWriter(writer); + this.printWriter = new PrintWriter(writer); + } } return this.printWriter; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nri...@us...> - 2011-02-22 17:29:59
|
Revision: 66 http://statelessfilter.svn.sourceforge.net/statelessfilter/?rev=66&view=rev Author: nricheton Date: 2011-02-22 17:29:53 +0000 (Tue, 22 Feb 2011) Log Message: ----------- https://sourceforge.net/apps/mantisbt/statelessfilter/view.php?id=21 Modified Paths: -------------- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/backend/support/CookieDataSupport.java Modified: trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/backend/support/CookieDataSupport.java =================================================================== --- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/backend/support/CookieDataSupport.java 2011-02-22 17:27:26 UTC (rev 65) +++ trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/backend/support/CookieDataSupport.java 2011-02-22 17:29:53 UTC (rev 66) @@ -17,6 +17,7 @@ import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import net.sourceforge.statelessfilter.backend.ISessionData; @@ -27,7 +28,7 @@ */ public class CookieDataSupport implements ISessionData { private static final long serialVersionUID = -8150387390531508793L; - private HashMap<String, Object> content; + private ConcurrentHashMap<String, Object> content; private long creationTime; private String id; private String remoteAddress; @@ -47,7 +48,7 @@ * session id or null session id is not tracked by backend. */ public CookieDataSupport(ISessionData session) { - content = new HashMap<String, Object>(); + content = new ConcurrentHashMap<String, Object>(); content.putAll(session.getContent()); creationTime = session.getCreationTime(); @@ -64,7 +65,7 @@ public CookieDataSupport(String sessionId) { this.id = sessionId; creationTime = System.currentTimeMillis(); - content = new HashMap<String, Object>(); + content = new ConcurrentHashMap<String, Object>(); valid = true; } @@ -90,7 +91,7 @@ } public void setContent(HashMap<String, Object> content) { - this.content = content; + this.content = new ConcurrentHashMap<String, Object>(content); } public void setCreationTime(long creationTime) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nri...@us...> - 2011-02-22 17:27:32
|
Revision: 65 http://statelessfilter.svn.sourceforge.net/statelessfilter/?rev=65&view=rev Author: nricheton Date: 2011-02-22 17:27:26 +0000 (Tue, 22 Feb 2011) Log Message: ----------- https://sourceforge.net/apps/mantisbt/statelessfilter/view.php?id=21 Modified Paths: -------------- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/session/SessionData.java trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/session/StatelessSession.java Modified: trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/session/SessionData.java =================================================================== --- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/session/SessionData.java 2011-02-14 10:32:42 UTC (rev 64) +++ trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/session/SessionData.java 2011-02-22 17:27:26 UTC (rev 65) @@ -16,8 +16,8 @@ package net.sourceforge.statelessfilter.session; import java.io.Serializable; -import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import net.sourceforge.statelessfilter.backend.ISessionData; @@ -29,7 +29,7 @@ */ public class SessionData implements ISessionData, Serializable { private static final long serialVersionUID = -8150387390531508793L; - HashMap<String, Object> content = new HashMap<String, Object>(); + ConcurrentHashMap<String, Object> content = new ConcurrentHashMap<String, Object>(); long creationTime; String id; long requestId; @@ -82,8 +82,8 @@ * * @param content */ - public void setContent(HashMap<String, Object> content) { - this.content = content; + public void setContent(Map<String, Object> content) { + this.content = new ConcurrentHashMap<String, Object>(content); } /** Modified: trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/session/StatelessSession.java =================================================================== --- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/session/StatelessSession.java 2011-02-14 10:32:42 UTC (rev 64) +++ trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/session/StatelessSession.java 2011-02-22 17:27:26 UTC (rev 65) @@ -16,11 +16,11 @@ import java.io.Serializable; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; -import java.util.ArrayList; import java.util.Enumeration; -import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Vector; +import java.util.concurrent.ConcurrentHashMap; import javax.servlet.ServletContext; import javax.servlet.http.HttpSession; @@ -46,7 +46,7 @@ * Generated serial ID */ private static final long serialVersionUID = 3707021777892035588L; - private Map<String, Object> content; + private ConcurrentHashMap<String, Object> content; private long creationTime; @@ -58,7 +58,7 @@ /** * Modified attributes during the current request. */ - private volatile List<String> modifiedAttributes = new ArrayList<String>(); + private volatile List<String> modifiedAttributes = new Vector<String>(); /** * Were this session properties (validity, maxInactiveInterval) modified during the @@ -207,7 +207,7 @@ setPropertyDirty(); } - content = new HashMap<String, Object>(); + content = new ConcurrentHashMap<String, Object>(); isNew = newSession; dirty = newSession; } @@ -218,7 +218,7 @@ public void invalidate() { valid = false; setPropertyDirty(); - content = new HashMap<String, Object>(); + content = new ConcurrentHashMap<String, Object>(); } public boolean isDirty() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nri...@us...> - 2011-02-14 10:32:48
|
Revision: 64 http://statelessfilter.svn.sourceforge.net/statelessfilter/?rev=64&view=rev Author: nricheton Date: 2011-02-14 10:32:42 +0000 (Mon, 14 Feb 2011) Log Message: ----------- [maven-release-plugin] prepare for next development iteration Modified Paths: -------------- trunk/pom.xml trunk/stateless-cookie-aes/pom.xml trunk/stateless-cookie-aes-json/pom.xml trunk/stateless-cookie-plain/pom.xml trunk/stateless-core/pom.xml trunk/stateless-memcache/pom.xml trunk/stateless-processor-cookie/pom.xml trunk/stateless-session/pom.xml Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2011-02-14 10:32:28 UTC (rev 63) +++ trunk/pom.xml 2011-02-14 10:32:42 UTC (rev 64) @@ -4,7 +4,7 @@ <artifactId>stateless-parent</artifactId> <packaging>pom</packaging> <name>Stateless filter</name> - <version>0.5</version> + <version>0.6-SNAPSHOT</version> <inceptionYear>2009</inceptionYear> <mailingLists> <mailingList> @@ -49,9 +49,9 @@ </developer> </developers> <scm> - <connection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/tags/stateless-parent-0.5</connection> - <developerConnection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/tags/stateless-parent-0.5</developerConnection> - <url>http://statelessfilter.svn.sourceforge.net/viewvc/statelessfilter/tags/stateless-parent-0.5</url> + <connection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/trunk</connection> + <developerConnection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/trunk</developerConnection> + <url>http://statelessfilter.svn.sourceforge.net/viewvc/statelessfilter/trunk/</url> </scm> <build> <plugins> Modified: trunk/stateless-cookie-aes/pom.xml =================================================================== --- trunk/stateless-cookie-aes/pom.xml 2011-02-14 10:32:28 UTC (rev 63) +++ trunk/stateless-cookie-aes/pom.xml 2011-02-14 10:32:42 UTC (rev 64) @@ -2,19 +2,19 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.5</version> + <version>0.6-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-cookie-aes</artifactId> <name>Store: AES cookie</name> - <version>0.5</version> + <version>0.6-SNAPSHOT</version> <dependencies> <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.5</version> + <version>0.6-SNAPSHOT</version> </dependency> <dependency> <groupId>javax.servlet</groupId> Modified: trunk/stateless-cookie-aes-json/pom.xml =================================================================== --- trunk/stateless-cookie-aes-json/pom.xml 2011-02-14 10:32:28 UTC (rev 63) +++ trunk/stateless-cookie-aes-json/pom.xml 2011-02-14 10:32:42 UTC (rev 64) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.5</version> + <version>0.6-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-cookie-aes-json</artifactId> <name>Store: AES+JSON cookie</name> - <version>0.5</version> + <version>0.6-SNAPSHOT</version> <build> <plugins> <plugin> @@ -27,7 +27,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.5</version> + <version>0.6-SNAPSHOT</version> <scope>compile</scope> </dependency> <dependency> Modified: trunk/stateless-cookie-plain/pom.xml =================================================================== --- trunk/stateless-cookie-plain/pom.xml 2011-02-14 10:32:28 UTC (rev 63) +++ trunk/stateless-cookie-plain/pom.xml 2011-02-14 10:32:42 UTC (rev 64) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.5</version> + <version>0.6-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-cookie-plain</artifactId> <name>Store: Plain cookie</name> - <version>0.5</version> + <version>0.6-SNAPSHOT</version> <build> <plugins> </plugins> @@ -17,7 +17,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.5</version> + <version>0.6-SNAPSHOT</version> <type>jar</type> <scope>compile</scope> </dependency> Modified: trunk/stateless-core/pom.xml =================================================================== --- trunk/stateless-core/pom.xml 2011-02-14 10:32:28 UTC (rev 63) +++ trunk/stateless-core/pom.xml 2011-02-14 10:32:42 UTC (rev 64) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.5</version> + <version>0.6-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> <name>Core</name> - <version>0.5</version> + <version>0.6-SNAPSHOT</version> <build> <plugins> Modified: trunk/stateless-memcache/pom.xml =================================================================== --- trunk/stateless-memcache/pom.xml 2011-02-14 10:32:28 UTC (rev 63) +++ trunk/stateless-memcache/pom.xml 2011-02-14 10:32:42 UTC (rev 64) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.5</version> + <version>0.6-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-memcache</artifactId> <name>Store: Memcache</name> - <version>0.5</version> + <version>0.6-SNAPSHOT</version> <build> <plugins> </plugins> @@ -17,7 +17,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.5</version> + <version>0.6-SNAPSHOT</version> <scope>compile</scope> </dependency> <dependency> <groupId>spy</groupId> Modified: trunk/stateless-processor-cookie/pom.xml =================================================================== --- trunk/stateless-processor-cookie/pom.xml 2011-02-14 10:32:28 UTC (rev 63) +++ trunk/stateless-processor-cookie/pom.xml 2011-02-14 10:32:42 UTC (rev 64) @@ -3,19 +3,19 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.5</version> + <version>0.6-SNAPSHOT</version> </parent> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-processor-cookie</artifactId> <name>Request Processor : Cookie</name> - <version>0.5</version> + <version>0.6-SNAPSHOT</version> <description>Persist request attributes to a cookie. id: processor-cookie</description> <dependencies> <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.5</version> + <version>0.6-SNAPSHOT</version> <scope>compile</scope> </dependency> <dependency> Modified: trunk/stateless-session/pom.xml =================================================================== --- trunk/stateless-session/pom.xml 2011-02-14 10:32:28 UTC (rev 63) +++ trunk/stateless-session/pom.xml 2011-02-14 10:32:42 UTC (rev 64) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.5</version> + <version>0.6-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-session</artifactId> <name>Store: Native Session</name> - <version>0.5</version> + <version>0.6-SNAPSHOT</version> <build> <plugins> </plugins> @@ -17,7 +17,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.5</version> + <version>0.6-SNAPSHOT</version> <scope>compile</scope> </dependency> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nri...@us...> - 2011-02-14 10:32:34
|
Revision: 63 http://statelessfilter.svn.sourceforge.net/statelessfilter/?rev=63&view=rev Author: nricheton Date: 2011-02-14 10:32:28 +0000 (Mon, 14 Feb 2011) Log Message: ----------- [maven-scm] copy for tag stateless-parent-0.5 Added Paths: ----------- tags/stateless-parent-0.5/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nri...@us...> - 2011-02-14 10:32:19
|
Revision: 62 http://statelessfilter.svn.sourceforge.net/statelessfilter/?rev=62&view=rev Author: nricheton Date: 2011-02-14 10:32:12 +0000 (Mon, 14 Feb 2011) Log Message: ----------- [maven-release-plugin] prepare release stateless-parent-0.5 Modified Paths: -------------- trunk/pom.xml trunk/stateless-cookie-aes/pom.xml trunk/stateless-cookie-aes-json/pom.xml trunk/stateless-cookie-plain/pom.xml trunk/stateless-core/pom.xml trunk/stateless-memcache/pom.xml trunk/stateless-processor-cookie/pom.xml trunk/stateless-session/pom.xml Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2011-02-14 10:17:17 UTC (rev 61) +++ trunk/pom.xml 2011-02-14 10:32:12 UTC (rev 62) @@ -4,7 +4,7 @@ <artifactId>stateless-parent</artifactId> <packaging>pom</packaging> <name>Stateless filter</name> - <version>0.5-SNAPSHOT</version> + <version>0.5</version> <inceptionYear>2009</inceptionYear> <mailingLists> <mailingList> @@ -49,9 +49,9 @@ </developer> </developers> <scm> - <connection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/trunk</connection> - <developerConnection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/trunk</developerConnection> - <url>http://statelessfilter.svn.sourceforge.net/viewvc/statelessfilter/trunk/</url> + <connection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/tags/stateless-parent-0.5</connection> + <developerConnection>scm:svn:https://statelessfilter.svn.sourceforge.net/svnroot/statelessfilter/tags/stateless-parent-0.5</developerConnection> + <url>http://statelessfilter.svn.sourceforge.net/viewvc/statelessfilter/tags/stateless-parent-0.5</url> </scm> <build> <plugins> Modified: trunk/stateless-cookie-aes/pom.xml =================================================================== --- trunk/stateless-cookie-aes/pom.xml 2011-02-14 10:17:17 UTC (rev 61) +++ trunk/stateless-cookie-aes/pom.xml 2011-02-14 10:32:12 UTC (rev 62) @@ -2,19 +2,19 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.5-SNAPSHOT</version> + <version>0.5</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-cookie-aes</artifactId> <name>Store: AES cookie</name> - <version>0.5-SNAPSHOT</version> + <version>0.5</version> <dependencies> <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.5-SNAPSHOT</version> + <version>0.5</version> </dependency> <dependency> <groupId>javax.servlet</groupId> Modified: trunk/stateless-cookie-aes-json/pom.xml =================================================================== --- trunk/stateless-cookie-aes-json/pom.xml 2011-02-14 10:17:17 UTC (rev 61) +++ trunk/stateless-cookie-aes-json/pom.xml 2011-02-14 10:32:12 UTC (rev 62) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.5-SNAPSHOT</version> + <version>0.5</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-cookie-aes-json</artifactId> <name>Store: AES+JSON cookie</name> - <version>0.5-SNAPSHOT</version> + <version>0.5</version> <build> <plugins> <plugin> @@ -27,7 +27,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.5-SNAPSHOT</version> + <version>0.5</version> <scope>compile</scope> </dependency> <dependency> Modified: trunk/stateless-cookie-plain/pom.xml =================================================================== --- trunk/stateless-cookie-plain/pom.xml 2011-02-14 10:17:17 UTC (rev 61) +++ trunk/stateless-cookie-plain/pom.xml 2011-02-14 10:32:12 UTC (rev 62) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.5-SNAPSHOT</version> + <version>0.5</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-cookie-plain</artifactId> <name>Store: Plain cookie</name> - <version>0.5-SNAPSHOT</version> + <version>0.5</version> <build> <plugins> </plugins> @@ -17,7 +17,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.5-SNAPSHOT</version> + <version>0.5</version> <type>jar</type> <scope>compile</scope> </dependency> Modified: trunk/stateless-core/pom.xml =================================================================== --- trunk/stateless-core/pom.xml 2011-02-14 10:17:17 UTC (rev 61) +++ trunk/stateless-core/pom.xml 2011-02-14 10:32:12 UTC (rev 62) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.5-SNAPSHOT</version> + <version>0.5</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> <name>Core</name> - <version>0.5-SNAPSHOT</version> + <version>0.5</version> <build> <plugins> Modified: trunk/stateless-memcache/pom.xml =================================================================== --- trunk/stateless-memcache/pom.xml 2011-02-14 10:17:17 UTC (rev 61) +++ trunk/stateless-memcache/pom.xml 2011-02-14 10:32:12 UTC (rev 62) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.5-SNAPSHOT</version> + <version>0.5</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-memcache</artifactId> <name>Store: Memcache</name> - <version>0.5-SNAPSHOT</version> + <version>0.5</version> <build> <plugins> </plugins> @@ -17,7 +17,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.5-SNAPSHOT</version> + <version>0.5</version> <scope>compile</scope> </dependency> <dependency> <groupId>spy</groupId> Modified: trunk/stateless-processor-cookie/pom.xml =================================================================== --- trunk/stateless-processor-cookie/pom.xml 2011-02-14 10:17:17 UTC (rev 61) +++ trunk/stateless-processor-cookie/pom.xml 2011-02-14 10:32:12 UTC (rev 62) @@ -3,19 +3,19 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.5-SNAPSHOT</version> + <version>0.5</version> </parent> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-processor-cookie</artifactId> <name>Request Processor : Cookie</name> - <version>0.5-SNAPSHOT</version> + <version>0.5</version> <description>Persist request attributes to a cookie. id: processor-cookie</description> <dependencies> <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.5-SNAPSHOT</version> + <version>0.5</version> <scope>compile</scope> </dependency> <dependency> Modified: trunk/stateless-session/pom.xml =================================================================== --- trunk/stateless-session/pom.xml 2011-02-14 10:17:17 UTC (rev 61) +++ trunk/stateless-session/pom.xml 2011-02-14 10:32:12 UTC (rev 62) @@ -2,13 +2,13 @@ <parent> <artifactId>stateless-parent</artifactId> <groupId>net.sourceforge.statelessfilter</groupId> - <version>0.5-SNAPSHOT</version> + <version>0.5</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-session</artifactId> <name>Store: Native Session</name> - <version>0.5-SNAPSHOT</version> + <version>0.5</version> <build> <plugins> </plugins> @@ -17,7 +17,7 @@ <dependency> <groupId>net.sourceforge.statelessfilter</groupId> <artifactId>stateless-core</artifactId> - <version>0.5-SNAPSHOT</version> + <version>0.5</version> <scope>compile</scope> </dependency> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nri...@us...> - 2011-02-14 10:17:24
|
Revision: 61 http://statelessfilter.svn.sourceforge.net/statelessfilter/?rev=61&view=rev Author: nricheton Date: 2011-02-14 10:17:17 +0000 (Mon, 14 Feb 2011) Log Message: ----------- Removed some warnings Modified Paths: -------------- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/backend/support/CookieBackendSupport.java trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/filter/IPlugin.java trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/filter/StatelessFilter.java Modified: trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/backend/support/CookieBackendSupport.java =================================================================== --- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/backend/support/CookieBackendSupport.java 2010-10-07 08:16:06 UTC (rev 60) +++ trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/backend/support/CookieBackendSupport.java 2011-02-14 10:17:17 UTC (rev 61) @@ -44,7 +44,7 @@ protected String cookieName = "session"; //$NON-NLS-1$ protected String domain = null; protected Integer maxAge = null; - protected String path = "/"; + protected String path = "/"; //$NON-NLS-1$ /** * @see net.sourceforge.statelessfilter.backend.ISessionBackend#destroy() @@ -114,7 +114,7 @@ return CookieUtils .createCookie(name, content, domain, path, maxAge); } catch (SignatureException e) { - logger.error("Error creating cookie", e); + logger.error("Error creating cookie", e); //$NON-NLS-1$ } return null; } @@ -130,7 +130,7 @@ try { return CookieUtils.getCookie(request, name); } catch (SignatureException e) { - logger.error("Error sending cookie", e); + logger.error("Error sending cookie", e); //$NON-NLS-1$ } return null; } Modified: trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/filter/IPlugin.java =================================================================== --- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/filter/IPlugin.java 2010-10-07 08:16:06 UTC (rev 60) +++ trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/filter/IPlugin.java 2011-02-14 10:17:17 UTC (rev 61) @@ -25,8 +25,8 @@ */ public interface IPlugin { - String TYPE_BACKEND = "backend"; - String TYPE_REQUEST_PROCESSOR = "processor"; + String TYPE_BACKEND = "backend"; //$NON-NLS-1$ + String TYPE_REQUEST_PROCESSOR = "processor"; //$NON-NLS-1$ /** * Destroy the backend. Used to perform some cleanup if necessary. Modified: trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/filter/StatelessFilter.java =================================================================== --- trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/filter/StatelessFilter.java 2010-10-07 08:16:06 UTC (rev 60) +++ trunk/stateless-core/src/main/java/net/sourceforge/statelessfilter/filter/StatelessFilter.java 2011-02-14 10:17:17 UTC (rev 61) @@ -96,7 +96,7 @@ * Servlet config paramter name used to configure the list of the excluded * uri patterns. */ - public static final String PARAM_EXCLUDE_PATTERN_LIST = "excludePatternList"; + public static final String PARAM_EXCLUDE_PATTERN_LIST = "excludePatternList"; //$NON-NLS-1$ /** * @see javax.servlet.Filter#destroy() @@ -212,9 +212,9 @@ // Enables Spring instantiation listener if Spring is available and // configured. if (SpringContextChecker.checkForSpring(servletContext)) { - if (logger.isInfoEnabled()) { - logger.info("Enabling Spring instantiation listener"); - } + + logger.info("Enabling Spring instantiation listener"); //$NON-NLS-1$ + instantiationListener = new SpringObjectInstantiationListener(); instantiationListener.setServletContext(servletContext); } @@ -224,7 +224,7 @@ initInstantiationListener(globalProp); } catch (Exception e) { throw new ServletException( - "Failed to load instantiation listener from /stateless.properties", + "Failed to load instantiation listener from /stateless.properties", //$NON-NLS-1$ e); } @@ -258,7 +258,7 @@ private void checkConfiguration() throws ServletException { if (this.configuration.backends.size() == 0) { throw new ServletException( - "No backend installed. Please add one (stateless-session for instance) in the classpath"); + "No backend installed. Please add one (stateless-session for instance) in the classpath"); //$NON-NLS-1$ } } @@ -319,8 +319,8 @@ // Ensure backend is available if (!configuration.backends.containsKey(backend)) { throw new ServletException( - "Attributes are mapped on backend " + backend - + " but it is not installed."); + "Attributes are mapped on backend " + backend //$NON-NLS-1$ + + " but it is not installed."); //$NON-NLS-1$ } } } @@ -374,9 +374,7 @@ // Create new instance instantiationListener = backClazz.newInstance(); instantiationListener.setServletContext(servletContext); - if (logger.isInfoEnabled()) { - logger.info("Using instantiation listener " + clazz); - } + logger.info("Using instantiation listener {}", clazz); //$NON-NLS-1$ } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |