Browse Source

preserve custom pre-bound RequestAttributes implementations (for Grails)

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@1490 50f2f4bb-b051-0410-bef5-90022cba6387
pull/1/head
Juergen Hoeller 17 years ago
parent
commit
5c19909c61
  1. 17
      org.springframework.web.portlet/src/main/java/org/springframework/web/portlet/FrameworkPortlet.java
  2. 17
      org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/FrameworkServlet.java
  3. 4
      org.springframework.web/src/main/java/org/springframework/web/context/request/RequestContextListener.java
  4. 5
      org.springframework.web/src/main/java/org/springframework/web/filter/RequestContextFilter.java

17
org.springframework.web.portlet/src/main/java/org/springframework/web/portlet/FrameworkPortlet.java

@ -502,8 +502,11 @@ public abstract class FrameworkPortlet extends GenericPortletBean @@ -502,8 +502,11 @@ public abstract class FrameworkPortlet extends GenericPortletBean
// Expose current RequestAttributes to current thread.
RequestAttributes previousRequestAttributes = RequestContextHolder.getRequestAttributes();
PortletRequestAttributes requestAttributes = new PortletRequestAttributes(request);
RequestContextHolder.setRequestAttributes(requestAttributes, this.threadContextInheritable);
PortletRequestAttributes requestAttributes = null;
if (previousRequestAttributes == null || previousRequestAttributes.getClass().equals(PortletRequestAttributes.class)) {
requestAttributes = new PortletRequestAttributes(request);
RequestContextHolder.setRequestAttributes(requestAttributes, this.threadContextInheritable);
}
if (logger.isTraceEnabled()) {
logger.trace("Bound request context to thread: " + request);
@ -541,12 +544,12 @@ public abstract class FrameworkPortlet extends GenericPortletBean @@ -541,12 +544,12 @@ public abstract class FrameworkPortlet extends GenericPortletBean
}
finally {
// Reset thread-bound context.
RequestContextHolder.setRequestAttributes(previousRequestAttributes, this.threadContextInheritable);
// Clear request attributes and reset thread-bound context.
LocaleContextHolder.setLocaleContext(previousLocaleContext, this.threadContextInheritable);
// Clear request attributes.
requestAttributes.requestCompleted();
if (requestAttributes != null) {
RequestContextHolder.setRequestAttributes(previousRequestAttributes, this.threadContextInheritable);
requestAttributes.requestCompleted();
}
if (logger.isTraceEnabled()) {
logger.trace("Cleared thread-bound resource request context: " + request);
}

17
org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/FrameworkServlet.java

@ -603,8 +603,11 @@ public abstract class FrameworkServlet extends HttpServletBean @@ -603,8 +603,11 @@ public abstract class FrameworkServlet extends HttpServletBean
// Expose current RequestAttributes to current thread.
RequestAttributes previousRequestAttributes = RequestContextHolder.getRequestAttributes();
ServletRequestAttributes requestAttributes = new ServletRequestAttributes(request);
RequestContextHolder.setRequestAttributes(requestAttributes, this.threadContextInheritable);
ServletRequestAttributes requestAttributes = null;
if (previousRequestAttributes == null || previousRequestAttributes.getClass().equals(ServletRequestAttributes.class)) {
requestAttributes = new ServletRequestAttributes(request);
RequestContextHolder.setRequestAttributes(requestAttributes, this.threadContextInheritable);
}
if (logger.isTraceEnabled()) {
logger.trace("Bound request context to thread: " + request);
@ -627,12 +630,12 @@ public abstract class FrameworkServlet extends HttpServletBean @@ -627,12 +630,12 @@ public abstract class FrameworkServlet extends HttpServletBean
}
finally {
// Reset thread-bound context.
RequestContextHolder.setRequestAttributes(previousRequestAttributes, this.threadContextInheritable);
// Clear request attributes and reset thread-bound context.
LocaleContextHolder.setLocaleContext(previousLocaleContext, this.threadContextInheritable);
// Clear request attributes.
requestAttributes.requestCompleted();
if (requestAttributes != null) {
RequestContextHolder.setRequestAttributes(previousRequestAttributes, this.threadContextInheritable);
requestAttributes.requestCompleted();
}
if (logger.isTraceEnabled()) {
logger.trace("Cleared thread-bound request context: " + request);
}

4
org.springframework.web/src/main/java/org/springframework/web/context/request/RequestContextListener.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2009 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -80,8 +80,8 @@ public class RequestContextListener implements ServletRequestListener { @@ -80,8 +80,8 @@ public class RequestContextListener implements ServletRequestListener {
if (attributes == null) {
attributes = threadAttributes;
}
RequestContextHolder.resetRequestAttributes();
LocaleContextHolder.resetLocaleContext();
RequestContextHolder.resetRequestAttributes();
}
if (attributes != null) {
attributes.requestCompleted();

5
org.springframework.web/src/main/java/org/springframework/web/filter/RequestContextFilter.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2009 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -17,7 +17,6 @@ @@ -17,7 +17,6 @@
package org.springframework.web.filter;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
@ -84,8 +83,8 @@ public class RequestContextFilter extends OncePerRequestFilter { @@ -84,8 +83,8 @@ public class RequestContextFilter extends OncePerRequestFilter {
filterChain.doFilter(request, response);
}
finally {
RequestContextHolder.resetRequestAttributes();
LocaleContextHolder.resetLocaleContext();
RequestContextHolder.resetRequestAttributes();
attributes.requestCompleted();
if (logger.isDebugEnabled()) {
logger.debug("Cleared thread-bound request context: " + request);

Loading…
Cancel
Save