Author: jafl
Date: Mon Jan 31 20:00:58 2011
New Revision: 1065735
URL: http://svn.apache.org/viewvc?rev=1065735&view=rev
Log:
WW-3546
provide API for overriding devMode per request, and check for override where
appropriate
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java
struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/debugging/DebuggingInterceptor.java
struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONInterceptor.java
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java?rev=1065735&r1=1065734&r2=1065735&view=diff
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
Mon Jan 31 20:00:58 2011
@@ -725,7 +725,8 @@ public class Dispatcher {
*/
public void sendError(HttpServletRequest request, HttpServletResponse
response,
ServletContext ctx, int code, Exception e) {
- if (devMode) {
+ Boolean devModeOverride = FilterDispatcher.getDevModeOverride();
+ if (devModeOverride != null ? devModeOverride.booleanValue() :
devMode) {
response.setContentType("text/html");
try {
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java?rev=1065735&r1=1065734&r2=1065735&view=diff
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java
Mon Jan 31 20:00:58 2011
@@ -170,11 +170,16 @@ public class FilterDispatcher implements
protected Dispatcher dispatcher;
/**
- * Loads stattic resources, set by injection
+ * Loads static resources, set by injection.
*/
protected StaticContentLoader staticResourceLoader;
/**
+ * Maintains per-request override of devMode configuration.
+ */
+ private static ThreadLocal<Boolean> devModeOverride = new
InheritableThreadLocal<Boolean>();
+
+ /**
* Initializes the filter by creating a default dispatcher
* and setting the default packages for static resources.
*
@@ -238,6 +243,27 @@ public class FilterDispatcher implements
}
/**
+ * Set an override of the static devMode value. Do not set this via a
+ * request parameter or any other unprotected method. Using a signed
+ * cookie is one safe way to turn it on per request.
+ *
+ * @param devMode the override value
+ */
+ public static void overrideDevMode(
+ boolean devMode)
+ {
+ devModeOverride.set(Boolean.valueOf(devMode));
+ }
+
+ /**
+ * @return Boolean override value, or null if no override
+ */
+ public static Boolean getDevModeOverride()
+ {
+ return devModeOverride.get();
+ }
+
+ /**
* Create a default {@link Dispatcher} that subclasses can override
* with a custom Dispatcher, if needed.
*
@@ -400,6 +426,7 @@ public class FilterDispatcher implements
} finally {
UtilTimerStack.pop(timerKey);
}
+ devModeOverride.remove();
}
}
}
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/debugging/DebuggingInterceptor.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/debugging/DebuggingInterceptor.java?rev=1065735&r1=1065734&r2=1065735&view=diff
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/debugging/DebuggingInterceptor.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/debugging/DebuggingInterceptor.java
Mon Jan 31 20:00:58 2011
@@ -40,6 +40,7 @@ import javax.servlet.http.HttpServletRes
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.StrutsConstants;
+import org.apache.struts2.dispatcher.FilterDispatcher;
import org.apache.struts2.views.freemarker.FreemarkerManager;
import org.apache.struts2.views.freemarker.FreemarkerResult;
@@ -157,6 +158,8 @@ public class DebuggingInterceptor implem
public String intercept(ActionInvocation inv) throws Exception {
boolean actionOnly = false;
boolean cont = true;
+ Boolean devModeOverride = FilterDispatcher.getDevModeOverride();
+ boolean devMode = devModeOverride != null ?
devModeOverride.booleanValue() : this.devMode;
if (devMode) {
final ActionContext ctx = ActionContext.getContext();
String type = getParameter(DEBUG_PARAM);
Modified:
struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONInterceptor.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONInterceptor.java?rev=1065735&r1=1065734&r2=1065735&view=diff
==============================================================================
---
struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONInterceptor.java
(original)
+++
struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONInterceptor.java
Mon Jan 31 20:00:58 2011
@@ -34,6 +34,7 @@ import javax.servlet.http.HttpServletRes
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.StrutsConstants;
+import org.apache.struts2.dispatcher.FilterDispatcher;
import org.apache.struts2.json.annotations.SMDMethod;
import org.apache.struts2.json.rpc.RPCError;
import org.apache.struts2.json.rpc.RPCErrorCode;
@@ -126,7 +127,7 @@ public class JSONInterceptor extends Abs
} catch (Exception e) {
RPCResponse rpcResponse = new RPCResponse();
rpcResponse.setId(smd.get("id").toString());
- rpcResponse.setError(new RPCError(e,
RPCErrorCode.EXCEPTION, debug));
+ rpcResponse.setError(new RPCError(e,
RPCErrorCode.EXCEPTION, getDebug()));
result = rpcResponse;
}
@@ -164,9 +165,8 @@ public class JSONInterceptor extends Abs
return Action.NONE;
} else {
if (LOG.isDebugEnabled()) {
- LOG
- .debug("Content type must be 'application/json' or
'application/json-rpc'. Ignoring request with content type "
- + contentType);
+ LOG.debug("Content type must be 'application/json' or
'application/json-rpc'. " +
+ "Ignoring request with content type " + contentType);
}
}
@@ -367,7 +367,8 @@ public class JSONInterceptor extends Abs
* @return true if debugging is turned on
*/
public boolean getDebug() {
- return this.debug;
+ Boolean devModeOverride = FilterDispatcher.getDevModeOverride();
+ return devModeOverride != null ? devModeOverride.booleanValue() :
this.debug;
}
/**
@@ -380,6 +381,13 @@ public class JSONInterceptor extends Abs
this.debug = debug;
}
+ @Inject(StrutsConstants.STRUTS_DEVMODE)
+ public void setDevMode(
+ String mode)
+ {
+ setDebug("true".equalsIgnoreCase(mode));
+ }
+
/**
* Sets a comma-delimited list of regular expressions to match properties
* that should be excluded from the JSON output.