Author: shijh
Date: Tue Jul 3 06:21:02 2018
New Revision: 1834917
URL: http://svn.apache.org/viewvc?rev=1834917&view=rev
Log:
Reverted: Add method attribute to request-map to controll a uri can be called
GET or POST only
OFBIZ-10438
Removed:
ofbiz/ofbiz-framework/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/collections/MultiValuedMapContext.java
ofbiz/ofbiz-framework/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/MethodNotAllowedException.java
ofbiz/ofbiz-framework/trunk/framework/webapp/src/test/java/org/apache/ofbiz/webapp/control/RequestHandlerTests.java
Modified:
ofbiz/ofbiz-framework/trunk/framework/webapp/config/WebappUiLabels.xml
ofbiz/ofbiz-framework/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/ConfigXMLReader.java
ofbiz/ofbiz-framework/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/ControlServlet.java
ofbiz/ofbiz-framework/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/RequestHandler.java
Modified: ofbiz/ofbiz-framework/trunk/framework/webapp/config/WebappUiLabels.xml
URL:
http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/webapp/config/WebappUiLabels.xml?rev=1834917&r1=1834916&r2=1834917&view=diff
==============================================================================
--- ofbiz/ofbiz-framework/trunk/framework/webapp/config/WebappUiLabels.xml
(original)
+++ ofbiz/ofbiz-framework/trunk/framework/webapp/config/WebappUiLabels.xml Tue
Jul 3 06:21:02 2018
@@ -339,8 +339,4 @@
<value xml:lang="zh">没æå®æäºä»¶</value>
<value xml:lang="zh-TW">æ²æå®æäºä»¶</value>
</property>
- <property key="RequestMethodNotMatchConfig">
- <value xml:lang="en">[{0}] cannot be called by [{1}] method.</value>
- <value xml:lang="zh">[{0}]ä¸è½ç¨[{1}]æ¹æ³è¯·æ±ã</value>
- </property>
</resource>
Modified:
ofbiz/ofbiz-framework/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/ConfigXMLReader.java
URL:
http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/ConfigXMLReader.java?rev=1834917&r1=1834916&r2=1834917&view=diff
==============================================================================
---
ofbiz/ofbiz-framework/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/ConfigXMLReader.java
(original)
+++
ofbiz/ofbiz-framework/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/ConfigXMLReader.java
Tue Jul 3 06:21:02 2018
@@ -23,21 +23,16 @@ import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
-import java.util.Objects;
import java.util.Set;
import java.util.function.Function;
-import java.util.stream.Collectors;
import javax.servlet.ServletContext;
-import javax.ws.rs.core.MultivaluedHashMap;
-import javax.ws.rs.core.MultivaluedMap;
import org.apache.ofbiz.base.component.ComponentConfig.WebappInfo;
import org.apache.ofbiz.base.location.FlexibleLocation;
@@ -54,7 +49,6 @@ import org.apache.ofbiz.base.util.UtilVa
import org.apache.ofbiz.base.util.UtilXml;
import org.apache.ofbiz.base.util.cache.UtilCache;
import org.apache.ofbiz.base.util.collections.MapContext;
-import org.apache.ofbiz.base.util.collections.MultiValuedMapContext;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -198,7 +192,7 @@ public class ConfigXMLReader {
private Map<String, Event> beforeLogoutEventList = new
LinkedHashMap<String, Event>();
private Map<String, String> eventHandlerMap = new HashMap<String,
String>();
private Map<String, String> viewHandlerMap = new HashMap<String,
String>();
- private MultivaluedMap<String, RequestMap> requestMapMap = new
MultivaluedHashMap<>();
+ private Map<String, RequestMap> requestMapMap = new HashMap<String,
RequestMap>();
private Map<String, ViewMap> viewMapMap = new HashMap<String,
ViewMap>();
public ControllerConfig(URL url) throws WebAppConfigurationException {
@@ -282,57 +276,11 @@ public class ConfigXMLReader {
return getIncludes(ccfg -> ccfg.protectView);
}
- // XXX: Temporary wrapper to handle conversion from Map to MultiMap.
public Map<String, RequestMap> getRequestMapMap() throws
WebAppConfigurationException {
- return new Map<String, RequestMap> () {
- private MultivaluedMap<String, RequestMap> deleg =
getRequestMapMultiMap();
- @Override public int size() { return deleg.size(); }
- @Override public boolean isEmpty() { return deleg.isEmpty(); }
- @Override public boolean containsKey(Object key) {
- return deleg.containsKey(key);
- }
- @Override public boolean containsValue(Object value) {
- return deleg.containsValue(value);
- }
- @Override public RequestMap get(Object key) {
- return deleg.getFirst((String) key);
- }
- @Override public RequestMap put(String key, RequestMap value) {
- RequestMap res = get(key);
- deleg.putSingle(key, value);
- return res;
- }
- @Override public RequestMap remove(Object key) {
- RequestMap res = get(key);
- deleg.remove(key);
- return res;
- }
- @Override public void putAll(Map<? extends String, ? extends
RequestMap> m) {
- m.forEach(deleg::add);
- }
- @Override public void clear() { deleg.clear(); }
- @Override public Set<String> keySet() { return deleg.keySet();
}
- @Override public Collection<RequestMap> values() {
- return deleg.values()
- .stream()
- .map(m -> m.stream().findFirst().orElse(null))
- .filter(Objects::nonNull)
- .collect(Collectors.toList());
- }
- @Override public Set<Entry<String, RequestMap>> entrySet() {
- return deleg.keySet()
- .stream()
- .collect(Collectors.toMap(k -> k, k -> get(k)))
- .entrySet();
- }
- };
- }
-
- public MultivaluedMap<String, RequestMap> getRequestMapMultiMap()
throws WebAppConfigurationException {
- MultiValuedMapContext<String, RequestMap> result =
MultiValuedMapContext.getMapContext();
+ MapContext<String, RequestMap> result = MapContext.getMapContext();
for (URL includeLocation : includes) {
ControllerConfig controllerConfig =
getControllerConfig(includeLocation);
- result.push(controllerConfig.getRequestMapMultiMap());
+ result.push(controllerConfig.getRequestMapMap());
}
result.push(requestMapMap);
return result;
@@ -455,7 +403,7 @@ public class ConfigXMLReader {
private void loadRequestMap(Element root) {
for (Element requestMapElement : UtilXml.childElementList(root,
"request-map")) {
RequestMap requestMap = new RequestMap(requestMapElement);
- this.requestMapMap.putSingle(requestMap.uri, requestMap);
+ this.requestMapMap.put(requestMap.uri, requestMap);
}
}
@@ -502,7 +450,6 @@ public class ConfigXMLReader {
public static class RequestMap {
public String uri;
- public String method;
public boolean edit = true;
public boolean trackVisit = true;
public boolean trackServerHit = true;
@@ -519,7 +466,6 @@ public class ConfigXMLReader {
public RequestMap(Element requestMapElement) {
// Get the URI info
this.uri = requestMapElement.getAttribute("uri");
- this.method = requestMapElement.getAttribute("method");
this.edit =
!"false".equals(requestMapElement.getAttribute("edit"));
this.trackServerHit =
!"false".equals(requestMapElement.getAttribute("track-serverhit"));
this.trackVisit =
!"false".equals(requestMapElement.getAttribute("track-visit"));
Modified:
ofbiz/ofbiz-framework/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/ControlServlet.java
URL:
http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/ControlServlet.java?rev=1834917&r1=1834916&r2=1834917&view=diff
==============================================================================
---
ofbiz/ofbiz-framework/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/ControlServlet.java
(original)
+++
ofbiz/ofbiz-framework/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/ControlServlet.java
Tue Jul 3 06:21:02 2018
@@ -80,20 +80,18 @@ public class ControlServlet extends Http
}
/**
- * @see javax.servlet.http.HttpServlet#doPost
+ * @see
javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest,
javax.servlet.http.HttpServletResponse)
*/
@Override
- protected void doPost(HttpServletRequest request, HttpServletResponse
response)
- throws ServletException, IOException {
+ public void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
doGet(request, response);
}
/**
- * @see javax.servlet.http.HttpServlet#doGet
+ * @see
javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest,
javax.servlet.http.HttpServletResponse)
*/
@Override
- protected void doGet(HttpServletRequest request, HttpServletResponse
response)
- throws ServletException, IOException {
+ public void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
long requestStartTime = System.currentTimeMillis();
RequestHandler requestHandler = this.getRequestHandler();
HttpSession session = request.getSession();
@@ -213,12 +211,6 @@ public class ControlServlet extends Http
try {
// the ServerHitBin call for the event is done inside the
doRequest method
requestHandler.doRequest(request, response, null, userLogin,
delegator);
- } catch (MethodNotAllowedException e) {
- response.setContentType("text/plain");
- response.setCharacterEncoding(request.getCharacterEncoding());
- response.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
- response.getWriter().print(e.getMessage());
- Debug.logError(e.getMessage(), module);
} catch (RequestHandlerException e) {
Throwable throwable = e.getNested() != null ? e.getNested() : e;
if (throwable instanceof IOException) {
Modified:
ofbiz/ofbiz-framework/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/RequestHandler.java
URL:
http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/RequestHandler.java?rev=1834917&r1=1834916&r2=1834917&view=diff
==============================================================================
---
ofbiz/ofbiz-framework/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/RequestHandler.java
(original)
+++
ofbiz/ofbiz-framework/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/RequestHandler.java
Tue Jul 3 06:21:02 2018
@@ -24,21 +24,16 @@ import java.io.IOException;
import java.io.Serializable;
import java.net.URL;
import java.security.cert.X509Certificate;
-
-import java.util.Collection;
-import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
-import java.util.Optional;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
-import javax.ws.rs.core.MultivaluedMap;
import org.apache.ofbiz.base.util.Debug;
import org.apache.ofbiz.base.util.SSLUtil;
@@ -56,7 +51,6 @@ import org.apache.ofbiz.entity.GenericVa
import org.apache.ofbiz.entity.util.EntityQuery;
import org.apache.ofbiz.entity.util.EntityUtilProperties;
import org.apache.ofbiz.webapp.OfbizUrlBuilder;
-import org.apache.ofbiz.webapp.control.ConfigXMLReader.RequestMap;
import org.apache.ofbiz.webapp.event.EventFactory;
import org.apache.ofbiz.webapp.event.EventHandler;
import org.apache.ofbiz.webapp.event.EventHandlerException;
@@ -74,77 +68,12 @@ import org.apache.ofbiz.widget.model.The
public class RequestHandler {
public static final String module = RequestHandler.class.getName();
- private final static String defaultStatusCodeString =
- UtilProperties.getPropertyValue("requestHandler", "status-code",
"302");
+ private final String defaultStatusCodeString =
UtilProperties.getPropertyValue("requestHandler", "status-code", "302");
private final ViewFactory viewFactory;
private final EventFactory eventFactory;
private final URL controllerConfigURL;
private final boolean trackServerHit;
private final boolean trackVisit;
- private Controller ctrl;
-
- static class Controller {
- private final MultivaluedMap<String, RequestMap> requestMapMap;
- private final Map<String, ConfigXMLReader.ViewMap> viewMapMap;
- private String statusCodeString;
- private final String defaultRequest;
- private final Map<String, ConfigXMLReader.Event> firstVisitEventList;
- private final Map<String, ConfigXMLReader.Event> preprocessorEventList;
- private final Map<String, ConfigXMLReader.Event>
postprocessorEventList;
- private final String protectView;
-
- Controller(ConfigXMLReader.ControllerConfig ccfg)
- throws WebAppConfigurationException {
- preprocessorEventList = ccfg.getPreprocessorEventList();
- postprocessorEventList = ccfg.getPostprocessorEventList();
- requestMapMap = ccfg.getRequestMapMultiMap();
- viewMapMap = ccfg.getViewMapMap();
- defaultRequest = ccfg.getDefaultRequest();
- firstVisitEventList = ccfg.getFirstVisitEventList();
- protectView = ccfg.getProtectView();
-
- String status = ccfg.getStatusCode();
- statusCodeString = UtilValidate.isEmpty(status)
- ? defaultStatusCodeString
- : status;
- }
-
- public MultivaluedMap<String, RequestMap> getRequestMapMap() {
- return requestMapMap;
- }
-
- public Map<String, ConfigXMLReader.ViewMap> getViewMapMap() {
- return viewMapMap;
- }
-
- public String getStatusCodeString() {
- return statusCodeString;
- }
-
- public String getDefaultRequest() {
- return defaultRequest;
- }
-
- public void setStatusCodeString(String statusCodeString) {
- this.statusCodeString = statusCodeString;
- }
-
- public Map<String, ConfigXMLReader.Event> getFirstVisitEventList() {
- return firstVisitEventList;
- }
-
- public Map<String, ConfigXMLReader.Event> getPreprocessorEventList() {
- return preprocessorEventList;
- }
-
- public Map<String, ConfigXMLReader.Event> getPostprocessorEventList() {
- return postprocessorEventList;
- }
-
- public String getProtectView() {
- return protectView;
- }
- }
public static RequestHandler getRequestHandler(ServletContext
servletContext) {
RequestHandler rh = (RequestHandler)
servletContext.getAttribute("_REQUEST_HANDLER_");
@@ -181,59 +110,6 @@ public class RequestHandler {
return null;
}
- /**
- * Find a collection of request maps in {@code ctrl} matching {@code req}.
- * Otherwise fall back to matching the {@code defaultReq} field.
- *
- * @param ctrl The controller containing the current configuration
- * @param req The HTTP request to match
- * @return a collection of request maps which might be empty
- */
- static Collection<RequestMap> resolveURI(Controller ctrl,
- HttpServletRequest req) {
- Map<String, List<RequestMap>> requestMapMap = ctrl.getRequestMapMap();
- Map<String, ConfigXMLReader.ViewMap> viewMapMap = ctrl.getViewMapMap();
- String defaultRequest = ctrl.getDefaultRequest();
- String path = req.getPathInfo();
- String requestUri = getRequestUri(path);
- String viewUri = getOverrideViewUri(path);
- Collection<RequestMap> rmaps;
- if (requestMapMap.containsKey(requestUri)
- && !viewMapMap.containsKey(viewUri)) {
- rmaps = requestMapMap.get(requestUri);
- } else if (defaultRequest != null) {
- rmaps = requestMapMap.get(defaultRequest);
- } else {
- rmaps = null;
- }
- return rmaps != null ? rmaps : Collections.emptyList();
- }
-
- /**
- * Find the request map matching {@code method}.
- * Otherwise fall back to the one matching the "all" and "" special methods
- * in that respective order.
- *
- * @param method the HTTP method to match
- * @param rmaps the collection of request map candidates
- * @return a request map {@code Optional}
- */
- static Optional<RequestMap> resolveMethod(String method,
- Collection<RequestMap> rmaps) {
- for (RequestMap map : rmaps) {
- if (map.method.equalsIgnoreCase(method)) {
- return Optional.of(map);
- }
- }
- if (method.isEmpty()) {
- return Optional.empty();
- } else if (method.equals("all")) {
- return resolveMethod("", rmaps);
- } else {
- return resolveMethod("all", rmaps);
- }
- }
-
public void doRequest(HttpServletRequest request, HttpServletResponse
response, String requestUri) throws RequestHandlerException,
RequestHandlerExceptionAllowExternalRequests {
HttpSession session = request.getSession();
Delegator delegator = (Delegator) request.getAttribute("delegator");
@@ -249,13 +125,20 @@ public class RequestHandler {
long startTime = System.currentTimeMillis();
HttpSession session = request.getSession();
- // Parse controller config.
+ // get the controllerConfig once for this method so we don't have to
get it over and over inside the method
+ ConfigXMLReader.ControllerConfig controllerConfig =
this.getControllerConfig();
+ Map<String, ConfigXMLReader.RequestMap> requestMapMap = null;
+ String statusCodeString = null;
try {
- ctrl = new Controller(getControllerConfig());
+ requestMapMap = controllerConfig.getRequestMapMap();
+ statusCodeString = controllerConfig.getStatusCode();
} catch (WebAppConfigurationException e) {
Debug.logError(e, "Exception thrown while parsing controller.xml
file: ", module);
throw new RequestHandlerException(e);
}
+ if (UtilValidate.isEmpty(statusCodeString)) {
+ statusCodeString = defaultStatusCodeString;
+ }
// workaround if we are in the root webapp
String cname = UtilHttp.getApplicationName(request);
@@ -270,32 +153,50 @@ public class RequestHandler {
}
}
- String requestMissingErrorMessage = "Unknown request ["
- + defaultRequestUri
- + "]; this request does not exist or cannot be called
directly.";
-
- String path = request.getPathInfo();
- String requestUri = getRequestUri(path);
- String overrideViewUri = getOverrideViewUri(path);
-
- Collection<RequestMap> rmaps = resolveURI(ctrl, request);
- if (rmaps.isEmpty()) {
- if (throwRequestHandlerExceptionOnMissingLocalRequest) {
- throw new RequestHandlerException(requestMissingErrorMessage);
- } else {
- throw new RequestHandlerExceptionAllowExternalRequests();
+ String overrideViewUri =
RequestHandler.getOverrideViewUri(request.getPathInfo());
+
+ String requestMissingErrorMessage = "Unknown request [" +
defaultRequestUri + "]; this request does not exist or cannot be called
directly.";
+ ConfigXMLReader.RequestMap requestMap = null;
+ if (defaultRequestUri != null) {
+ requestMap = requestMapMap.get(defaultRequestUri);
+ }
+ // check for default request
+ if (requestMap == null) {
+ String defaultRequest;
+ try {
+ defaultRequest = controllerConfig.getDefaultRequest();
+ } catch (WebAppConfigurationException e) {
+ Debug.logError(e, "Exception thrown while parsing
controller.xml file: ", module);
+ throw new RequestHandlerException(e);
+ }
+ if (defaultRequest != null) { // required! to avoid a null pointer
exception and generate a requesthandler exception if default request not found.
+ requestMap = requestMapMap.get(defaultRequest);
}
}
- String method = request.getMethod();
- RequestMap requestMap = resolveMethod(method, rmaps)
- .orElseThrow(() -> {
- String msg = UtilProperties.getMessage("WebappUiLabels",
- "RequestMethodNotMatchConfig",
- UtilMisc.toList(requestUri, method),
- UtilHttp.getLocale(request));
- return new MethodNotAllowedException(msg);
- });
+ // check for override view
+ if (overrideViewUri != null) {
+ ConfigXMLReader.ViewMap viewMap;
+ try {
+ viewMap =
getControllerConfig().getViewMapMap().get(overrideViewUri);
+ if (viewMap == null) {
+ String defaultRequest =
controllerConfig.getDefaultRequest();
+ if (defaultRequest != null) { // required! to avoid a null
pointer exception and generate a requesthandler exception if default request
not found.
+ requestMap = requestMapMap.get(defaultRequest);
+ }
+ }
+ } catch (WebAppConfigurationException e) {
+ Debug.logError(e, "Exception thrown while parsing
controller.xml file: ", module);
+ throw new RequestHandlerException(e);
+ }
+ }
+
+ // if no matching request is found in the controller, depending on
throwRequestHandlerExceptionOnMissingLocalRequest
+ // we throw a RequestHandlerException or
RequestHandlerExceptionAllowExternalRequests
+ if (requestMap == null) {
+ if (throwRequestHandlerExceptionOnMissingLocalRequest) throw new
RequestHandlerException(requestMissingErrorMessage);
+ else throw new RequestHandlerExceptionAllowExternalRequests();
+ }
String eventReturn = null;
if (requestMap.metrics != null && requestMap.metrics.getThreshold() !=
0.0 && requestMap.metrics.getTotalEvents() > 3 &&
requestMap.metrics.getThreshold() < requestMap.metrics.getServiceRate()) {
@@ -303,11 +204,13 @@ public class RequestHandler {
}
ConfigXMLReader.RequestMap originalRequestMap = requestMap; // Save
this so we can update the correct performance metrics.
+
boolean interruptRequest = false;
+
// Check for chained request.
if (chain != null) {
String chainRequestUri = RequestHandler.getRequestUri(chain);
- requestMap = ctrl.getRequestMapMap().getFirst(chainRequestUri);
+ requestMap = requestMapMap.get(chainRequestUri);
if (requestMap == null) {
throw new RequestHandlerException("Unknown chained request ["
+ chainRequestUri + "]; this request does not exist");
}
@@ -331,11 +234,18 @@ public class RequestHandler {
// Check to make sure we are allowed to access this request
directly. (Also checks if this request is defined.)
// If the request cannot be called, or is not defined, check and
see if there is a default-request we can process
if (!requestMap.securityDirectRequest) {
- if (ctrl.getDefaultRequest() == null ||
!ctrl.getRequestMapMap().getFirst(ctrl.getDefaultRequest()).securityDirectRequest)
{
+ String defaultRequest;
+ try {
+ defaultRequest = controllerConfig.getDefaultRequest();
+ } catch (WebAppConfigurationException e) {
+ Debug.logError(e, "Exception thrown while parsing
controller.xml file: ", module);
+ throw new RequestHandlerException(e);
+ }
+ if (defaultRequest == null ||
!requestMapMap.get(defaultRequest).securityDirectRequest) {
// use the same message as if it was missing for security
reasons, ie so can't tell if it is missing or direct request is not allowed
throw new
RequestHandlerException(requestMissingErrorMessage);
} else {
- requestMap =
ctrl.getRequestMapMap().getFirst(ctrl.getDefaultRequest());
+ requestMap = requestMapMap.get(defaultRequest);
}
}
// Check if we SHOULD be secure and are not.
@@ -378,7 +288,7 @@ public class RequestHandler {
String newUrl = RequestHandler.makeUrl(request, response,
urlBuf.toString());
if (newUrl.toUpperCase().startsWith("HTTPS")) {
// if we are supposed to be secure, redirect secure.
- callRedirect(newUrl, response, request,
ctrl.getStatusCodeString());
+ callRedirect(newUrl, response, request,
statusCodeString);
return;
}
}
@@ -423,52 +333,63 @@ public class RequestHandler {
if (Debug.infoOn())
Debug.logInfo("This is the first request in this visit." +
showSessionId(request), module);
session.setAttribute("_FIRST_VISIT_EVENTS_", "complete");
- for (ConfigXMLReader.Event event:
ctrl.getFirstVisitEventList().values()) {
- try {
- String returnString = this.runEvent(request, response,
event, null, "firstvisit");
- if (returnString == null ||
"none".equalsIgnoreCase(returnString)) {
- interruptRequest = true;
- } else if (!"success".equalsIgnoreCase(returnString)) {
- throw new EventHandlerException("First-Visit event
did not return 'success'.");
+ try {
+ for (ConfigXMLReader.Event event:
controllerConfig.getFirstVisitEventList().values()) {
+ try {
+ String returnString = this.runEvent(request,
response, event, null, "firstvisit");
+ if (returnString == null ||
"none".equalsIgnoreCase(returnString)) {
+ interruptRequest = true;
+ } else if
(!"success".equalsIgnoreCase(returnString)) {
+ throw new EventHandlerException("First-Visit
event did not return 'success'.");
+ }
+ } catch (EventHandlerException e) {
+ Debug.logError(e, module);
}
- } catch (EventHandlerException e) {
- Debug.logError(e, module);
}
+ } catch (WebAppConfigurationException e) {
+ Debug.logError(e, "Exception thrown while parsing
controller.xml file: ", module);
+ throw new RequestHandlerException(e);
}
}
// Invoke the pre-processor (but NOT in a chain)
- for (ConfigXMLReader.Event event:
ctrl.getPreprocessorEventList().values()) {
- try {
- String returnString = this.runEvent(request, response,
event, null, "preprocessor");
- if (returnString == null ||
"none".equalsIgnoreCase(returnString)) {
- interruptRequest = true;
- } else if (!"success".equalsIgnoreCase(returnString)) {
- if (!returnString.contains(":_protect_:")) {
- throw new EventHandlerException("Pre-Processor
event [" + event.invoke + "] did not return 'success'.");
- } else { // protect the view normally rendered and
redirect to error response view
- returnString = returnString.replace(":_protect_:",
"");
- if (returnString.length() > 0) {
- request.setAttribute("_ERROR_MESSAGE_",
returnString);
- }
- eventReturn = null;
- // check to see if there is a "protect" response,
if so it's ok else show the default_error_response_view
- if
(!requestMap.requestResponseMap.containsKey("protect")) {
- if (ctrl.getProtectView() != null) {
- overrideViewUri = ctrl.getProtectView();
- } else {
- overrideViewUri =
EntityUtilProperties.getPropertyValue("security",
"default.error.response.view", delegator);
- overrideViewUri =
overrideViewUri.replace("view:", "");
- if ("none:".equals(overrideViewUri)) {
- interruptRequest = true;
+ try {
+ for (ConfigXMLReader.Event event:
controllerConfig.getPreprocessorEventList().values()) {
+ try {
+ String returnString = this.runEvent(request, response,
event, null, "preprocessor");
+ if (returnString == null ||
"none".equalsIgnoreCase(returnString)) {
+ interruptRequest = true;
+ } else if (!"success".equalsIgnoreCase(returnString)) {
+ if (!returnString.contains(":_protect_:")) {
+ throw new EventHandlerException("Pre-Processor
event [" + event.invoke + "] did not return 'success'.");
+ } else { // protect the view normally rendered and
redirect to error response view
+ returnString =
returnString.replace(":_protect_:", "");
+ if (returnString.length() > 0) {
+ request.setAttribute("_ERROR_MESSAGE_",
returnString);
+ }
+ eventReturn = null;
+ // check to see if there is a "protect"
response, if so it's ok else show the default_error_response_view
+ if
(!requestMap.requestResponseMap.containsKey("protect")) {
+ String protectView =
controllerConfig.getProtectView();
+ if (protectView != null) {
+ overrideViewUri = protectView;
+ } else {
+ overrideViewUri =
EntityUtilProperties.getPropertyValue("security",
"default.error.response.view", delegator);
+ overrideViewUri =
overrideViewUri.replace("view:", "");
+ if ("none:".equals(overrideViewUri)) {
+ interruptRequest = true;
+ }
}
}
}
}
+ } catch (EventHandlerException e) {
+ Debug.logError(e, module);
}
- } catch (EventHandlerException e) {
- Debug.logError(e, module);
}
+ } catch (WebAppConfigurationException e) {
+ Debug.logError(e, "Exception thrown while parsing
controller.xml file: ", module);
+ throw new RequestHandlerException(e);
}
}
@@ -488,7 +409,7 @@ public class RequestHandler {
// Invoke the security handler
// catch exceptions and throw RequestHandlerException if failed.
if (Debug.verboseOn()) Debug.logVerbose("[RequestHandler]:
AuthRequired. Running security check. " + showSessionId(request), module);
- ConfigXMLReader.Event checkLoginEvent =
ctrl.getRequestMapMap().getFirst("checkLogin").event;
+ ConfigXMLReader.Event checkLoginEvent =
requestMapMap.get("checkLogin").event;
String checkLoginReturnString = null;
try {
@@ -501,9 +422,9 @@ public class RequestHandler {
eventReturn = checkLoginReturnString;
// if the request is an ajax request we don't want to return
the default login check
if
(!"XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {
- requestMap =
ctrl.getRequestMapMap().getFirst("checkLogin");
+ requestMap = requestMapMap.get("checkLogin");
} else {
- requestMap =
ctrl.getRequestMapMap().getFirst("ajaxCheckLogin");
+ requestMap = requestMapMap.get("ajaxCheckLogin");
}
}
}
@@ -635,7 +556,7 @@ public class RequestHandler {
redirectTarget += "?" + queryString;
}
- callRedirect(makeLink(request, response, redirectTarget),
response, request, ctrl.getStatusCodeString());
+ callRedirect(makeLink(request, response, redirectTarget),
response, request, statusCodeString);
return;
}
}
@@ -682,35 +603,41 @@ public class RequestHandler {
// ======== handle views ========
// first invoke the post-processor events.
- for (ConfigXMLReader.Event event:
ctrl.getPostprocessorEventList().values()) {
- try {
- String returnString = this.runEvent(request, response,
event, requestMap, "postprocessor");
- if (returnString != null &&
!"success".equalsIgnoreCase(returnString)) {
- throw new EventHandlerException("Post-Processor event
did not return 'success'.");
+ try {
+ for (ConfigXMLReader.Event event:
controllerConfig.getPostprocessorEventList().values()) {
+ try {
+ String returnString = this.runEvent(request, response,
event, requestMap, "postprocessor");
+ if (returnString != null &&
!"success".equalsIgnoreCase(returnString)) {
+ throw new EventHandlerException("Post-Processor
event did not return 'success'.");
+ }
+ } catch (EventHandlerException e) {
+ Debug.logError(e, module);
}
- } catch (EventHandlerException e) {
- Debug.logError(e, module);
}
+ } catch (WebAppConfigurationException e) {
+ Debug.logError(e, "Exception thrown while parsing
controller.xml file: ", module);
+ throw new RequestHandlerException(e);
}
String responseStatusCode = nextRequestResponse.statusCode;
if(UtilValidate.isNotEmpty(responseStatusCode))
- ctrl.setStatusCodeString(responseStatusCode);
+ statusCodeString = responseStatusCode;
+
if ("url".equals(nextRequestResponse.type)) {
if (Debug.verboseOn())
Debug.logVerbose("[RequestHandler.doRequest]: Response is a URL redirect." +
showSessionId(request), module);
- callRedirect(nextRequestResponse.value, response, request,
ctrl.getStatusCodeString());
+ callRedirect(nextRequestResponse.value, response, request,
statusCodeString);
} else if ("cross-redirect".equals(nextRequestResponse.type)) {
// check for a cross-application redirect
if (Debug.verboseOn())
Debug.logVerbose("[RequestHandler.doRequest]: Response is a Cross-Application
redirect." + showSessionId(request), module);
String url = nextRequestResponse.value.startsWith("/") ?
nextRequestResponse.value : "/" + nextRequestResponse.value;
- callRedirect(url + this.makeQueryString(request,
nextRequestResponse), response, request, ctrl.getStatusCodeString());
+ callRedirect(url + this.makeQueryString(request,
nextRequestResponse), response, request, statusCodeString);
} else if ("request-redirect".equals(nextRequestResponse.type)) {
if (Debug.verboseOn())
Debug.logVerbose("[RequestHandler.doRequest]: Response is a Request redirect."
+ showSessionId(request), module);
- callRedirect(makeLinkWithQueryString(request, response, "/" +
nextRequestResponse.value, nextRequestResponse), response, request,
ctrl.getStatusCodeString());
+ callRedirect(makeLinkWithQueryString(request, response, "/" +
nextRequestResponse.value, nextRequestResponse), response, request,
statusCodeString);
} else if
("request-redirect-noparam".equals(nextRequestResponse.type)) {
if (Debug.verboseOn())
Debug.logVerbose("[RequestHandler.doRequest]: Response is a Request redirect
with no parameters." + showSessionId(request), module);
- callRedirect(makeLink(request, response,
nextRequestResponse.value), response, request, ctrl.getStatusCodeString());
+ callRedirect(makeLink(request, response,
nextRequestResponse.value), response, request, statusCodeString);
} else if ("view".equals(nextRequestResponse.type)) {
if (Debug.verboseOn())
Debug.logVerbose("[RequestHandler.doRequest]: Response is a view." +
showSessionId(request), module);