Update of /var/cvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib
In directory james.mmbase.org:/tmp/cvs-serv22795
Modified Files:
ContextTag.java
Log Message:
Related to fix for MMB-1730. Make sure no pagecontexts and those kind of things
are stored in requests and sessions and so on
See also:
http://cvs.mmbase.org/viewcvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib
See also: http://www.mmbase.org/jira/browse/MMB-1730
Index: ContextTag.java
===================================================================
RCS file:
/var/cvs/applications/taglib/src/org/mmbase/bridge/jsp/taglib/ContextTag.java,v
retrieving revision 1.92
retrieving revision 1.93
diff -u -b -r1.92 -r1.93
--- ContextTag.java 7 Oct 2008 10:39:48 -0000 1.92
+++ ContextTag.java 13 Oct 2008 12:04:30 -0000 1.93
@@ -11,6 +11,8 @@
import java.io.IOException;
import javax.servlet.jsp.*;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletRequestWrapper;
import org.mmbase.bridge.*;
import org.mmbase.bridge.jsp.taglib.util.*;
@@ -43,7 +45,7 @@
* </p>
*
* @author Michiel Meeuwissen
- * @version $Id: ContextTag.java,v 1.92 2008/10/07 10:39:48 michiel Exp $
+ * @version $Id: ContextTag.java,v 1.93 2008/10/13 12:04:30 michiel Exp $
* @see ImportTag
* @see WriteTag
*/
@@ -134,6 +136,18 @@
return (ContextContainer)pageContext.getAttribute(CONTAINER_KEY_PREFIX
+ number);
}
+
+ /**
+ * @since MMBase-1.9
+ */
+ protected static ServletRequest unwrap(ServletRequest req) {
+ while (req instanceof ServletRequestWrapper) {
+ req = ((ServletRequestWrapper) req).getRequest();
+ }
+ return req;
+ }
+
+
public int doStartTag() throws JspTagException {
log.debug("Start tag of ContextTag");
ContextContainer container;
@@ -160,6 +174,21 @@
container = (ContextContainer) o;
log.debug("Resetting parent of " + container + " to " +
getContextProvider().getContextContainer());
prevParent = container.getParent();
+ if (prevParent instanceof PageContextContainer) {
+ // if for some reason, the parent in the container is from
a different
+ // request. Do not accept that.
+ PageContextContainer prevPc = (PageContextContainer)
prevParent;
+ if (((PageContextBacking)
prevPc.getBacking()).getPageContext() != pageContext) {
+ ServletRequest prevReq = unwrap(((PageContextBacking)
prevPc.getBacking()).getPageContext().getRequest());
+ if (prevReq != unwrap(pageContext.getRequest())) {
+ log.warn("found a pagecontext container for a
different request (" + prevReq + " != '" + pageContext.getRequest() + "').
Reparing");
+ } else {
+ log.debug("found a pagecontext container for a
different pageContext. Reparing");
+ }
+ prevParent = new PageContextContainer(pageContext);
+ }
+ }
+
container.setParent(pageContext,
getContextProvider().getContextContainer());
pageContext.setAttribute(CONTAINER_KEY_PREFIX + number,
container, PageContext.PAGE_SCOPE);
}
@@ -173,7 +202,8 @@
if (id == null) {
id = referid.getString(this);
}
- pageContext.setAttribute(id, container, s);
+ ContextContainer storedContainer = new
StandaloneContextContainer(id, container.getBacking().getOriginalMap());
+ pageContext.setAttribute(id, storedContainer, s);
}
setCloudContext(getContextTag().cloudContext);
if (getId() != null) {
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs