diff --git a/nuxeo-platform-web-common/src/main/java/org/nuxeo/ecm/platform/ui/web/auth/NuxeoAuthenticationFilter.java b/nuxeo-platform-web-common/src/main/java/org/nuxeo/ecm/platform/ui/web/auth/NuxeoAuthenticationFilter.java index 3372cd3..29d2874 100644 --- a/nuxeo-platform-web-common/src/main/java/org/nuxeo/ecm/platform/ui/web/auth/NuxeoAuthenticationFilter.java +++ b/nuxeo-platform-web-common/src/main/java/org/nuxeo/ecm/platform/ui/web/auth/NuxeoAuthenticationFilter.java @@ -261,19 +261,22 @@ public class NuxeoAuthenticationFilter implements Filter { } protected static boolean isLoginSynchronized() { - if (isLoginSynchronized != null) { + if (isLoginSynchronized != null) { return isLoginSynchronized; } if (Framework.getRuntime() == null) { return false; } - synchronized(NuxeoAuthenticationFilter.class){ + synchronized (NuxeoAuthenticationFilter.class) { if (isLoginSynchronized != null) { return isLoginSynchronized; } - return isLoginSynchronized = !Boolean.parseBoolean(Framework.getProperty("org.nuxeo.ecm.platform.ui.web.auth.NuxeoAuthenticationFilter.isLoginNotSynchronized", "true")); + return isLoginSynchronized = !Boolean.parseBoolean(Framework.getProperty( + "org.nuxeo.ecm.platform.ui.web.auth.NuxeoAuthenticationFilter.isLoginNotSynchronized", + "true")); } } + protected Principal doAuthenticate( CachableUserIdentificationInfo cachableUserIdent, HttpServletRequest httpRequest) { @@ -679,7 +682,7 @@ public class NuxeoAuthenticationFilter implements Filter { protected void doInitIfNeeded() throws ServletException { if (service == null && Framework.getRuntime() != null) { - synchronized(this) { + synchronized (this) { if (service != null) { return; } @@ -724,7 +727,74 @@ public class NuxeoAuthenticationFilter implements Filter { final boolean isTimeout = session == null && hasRequestedSessionId; if (!httpResponse.isCommitted()) { - session = httpRequest.getSession(true); + try { + session = httpRequest.getSession(true); + } catch (IllegalStateException e) { + // response could have been commited in the mean time, it seems + log.warn("Cannot save requested URL before redirect: " + + e.getMessage()); + return false; + } catch (NullPointerException e) { + // concurrent request in same conversation use case + /** + * 21:24:14,946 ERROR [[/nuxeo]] Session event listener threw + * exception java.lang.NullPointerException at + * org.apache.catalina + * .connector.Request.notifyAttributeRemoved(Request.java:1603) + * at org.apache.catalina.connector.Request.removeAttribute( + * Request.java:1484) at + * org.apache.catalina.connector.RequestFacade + * .removeAttribute(RequestFacade.java:554) at + * javax.servlet.ServletRequestWrapper + * .removeAttribute(ServletRequestWrapper.java:248) at + * javax.servlet.ServletRequestWrapper.removeAttribute( + * ServletRequestWrapper.java:248) at + * com.sun.faces.context.RequestMap.remove(RequestMap.java:113) + * at org.jboss.seam.contexts.BasicContext.remove(BasicContext. + * java:73) at + * org.jboss.seam.Component.newInstance(Component.java:2211) at + * org.jboss.seam.Component.getInstance(Component.java:2035) at + * org.jboss.seam.Component.getInstance(Component.java:2014) at + * org.jboss.seam.Component.getInstance(Component.java:2008) at + * org.jboss.seam.Component.getInstance(Component.java:1981) at + * org.jboss.seam.Component.getInstance(Component.java:1976) at + * org.jboss.seam.core.Events.instance(Events.java:157) at + * org.jboss.seam.core.Events.exists(Events.java:152) at + * org.jboss + * .seam.contexts.BasicContext.remove(BasicContext.java:72) at + * org.jboss.seam.Component.newInstance(Component.java:2211) at + * org.jboss.seam.contexts.Contexts.startup(Contexts.java:343) + * at + * org.jboss.seam.contexts.Contexts.startup(Contexts.java:317) + * at org.jboss.seam.contexts.Lifecycle.beginSession(Lifecycle. + * java:233) at + * org.jboss.seam.contexts.ServletLifecycle.beginSession + * (ServletLifecycle.java:182) at + * org.jboss.seam.servlet.SeamListener + * .sessionCreated(SeamListener.java:46) at + * org.apache.catalina. + * session.StandardSession.tellNew(StandardSession.java:423) at + * org.apache.catalina.session.StandardSession.setId( + * StandardSession.java:395) at + * org.apache.catalina.session.StandardSession + * .setId(StandardSession.java:376) at + * org.apache.catalina.session + * .ManagerBase.createSession(ManagerBase.java:655) at + * org.apache + * .catalina.connector.Request.doGetSession(Request.java:2898) + * at org.apache.catalina.connector.Request.getSession(Request. + * java:2316) at + * org.apache.catalina.connector.RequestFacade.getSession + * (RequestFacade.java:898) at + * org.nuxeo.ecm.platform.ui.web.auth + * .NuxeoAuthenticationFilter. + * saveRequestedURLBeforeRedirect(NuxeoAuthenticationFilter + * .java:731) + **/ + log.warn("Cannot save requested URL before redirect: " + + e.getMessage()); + return false; + } } if (session == null) { @@ -751,7 +821,6 @@ public class NuxeoAuthenticationFilter implements Filter { session.removeAttribute(SESSION_TIMEOUT); } - // avoid redirect if not useful if (requestPage.startsWith(DEFAULT_START_PAGE)) { return true;