svn commit: r1818494 - in /ofbiz/ofbiz-framework/trunk/framework/webapp: entitydef/entitymodel.xml src/main/java/org/apache/ofbiz/webapp/control/RequestHandler.java src/main/java/org/apache/ofbiz/webapp/website/WebSiteProperties.java

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r1818494 - in /ofbiz/ofbiz-framework/trunk/framework/webapp: entitydef/entitymodel.xml src/main/java/org/apache/ofbiz/webapp/control/RequestHandler.java src/main/java/org/apache/ofbiz/webapp/website/WebSiteProperties.java

nmalin
Author: nmalin
Date: Sun Dec 17 16:47:18 2017
New Revision: 1818494

URL: http://svn.apache.org/viewvc?rev=1818494&view=rev
Log:
Implemented: Website can manage hidden webapp (OFBIZ-10088)

Improve RequestHandler.makeLink code to manage url generation with surcharge the webapp path.
When a websiteId is present and it have a webappPatch define, use it on the link generation.

Example of use :
You have a httpd serveur that listen on *.mydomaine.com and define virtualHost myEcommerce.mydomaine.com and myCatalog.mydomaine.com
myEcommerce.mydomaine.com is a reverse proxy to myEcommerce.mydomaine.com/ecommerce
myCatalog.mydomaine.com is a reverse proxy to myEcommerce.mydomaine.com/catalog

Natively, all works fine with some parameters on web.xml and controller.xml but each link return are setted like that myEcommerce.mydomaine.com/ecommerce, called by apache httpd to ofbiz by myEcommerce.mydomaine.com/ecommerce/ecommerce and translate by ofbiz by ERROR ecommerce request-map not found

To solve the situation, I extended WebSite entity with attribute webappPath, init to / for websiteId ecommerce ofbiz instance and /ecommerce for other websiteId liked to other ofbiz instance (dev, back) without apache httpd with limited reverse-proxy.

Modified:
    ofbiz/ofbiz-framework/trunk/framework/webapp/entitydef/entitymodel.xml
    ofbiz/ofbiz-framework/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/RequestHandler.java
    ofbiz/ofbiz-framework/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/website/WebSiteProperties.java

Modified: ofbiz/ofbiz-framework/trunk/framework/webapp/entitydef/entitymodel.xml
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/webapp/entitydef/entitymodel.xml?rev=1818494&r1=1818493&r2=1818494&view=diff
==============================================================================
--- ofbiz/ofbiz-framework/trunk/framework/webapp/entitydef/entitymodel.xml (original)
+++ ofbiz/ofbiz-framework/trunk/framework/webapp/entitydef/entitymodel.xml Sun Dec 17 16:47:18 2017
@@ -223,6 +223,9 @@ under the License.
       <field name="httpsHost" type="long-varchar"></field>
       <field name="httpsPort" type="very-short"></field>
       <field name="enableHttps" type="indicator"></field>
+      <field name="webappPath" type="long-varchar">
+          <description>Set your dedicate webapp for this website if it's hidden by a httpd frontend, set to / if you have a reverse proxy that hidden your website webapp</description>
+      </field>
       <field name="standardContentPrefix" type="url"></field>
       <field name="secureContentPrefix" type="url"></field>
       <field name="cookieDomain" type="long-varchar"></field>

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=1818494&r1=1818493&r2=1818494&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 Sun Dec 17 16:47:18 2017
@@ -1139,6 +1139,20 @@ public class RequestHandler {
         }
         // create the path to the control servlet
         String controlPath = (String) request.getAttribute("_CONTROL_PATH_");
+
+        //If required by webSite parameter, surcharge control path
+        if (webSiteProps.getWebappPath() != null) {
+            String requestPath = request.getServletPath();
+            if (requestPath == null) requestPath = "";
+            if (requestPath.lastIndexOf("/") > 0) {
+                if (requestPath.indexOf("/") == 0) {
+                    requestPath = "/" + requestPath.substring(1, requestPath.indexOf("/", 1));
+                } else {
+                    requestPath = requestPath.substring(1, requestPath.indexOf("/"));
+                }
+            }
+            controlPath = webSiteProps.getWebappPath().concat(requestPath);
+        }
         newURL.append(controlPath);
 
         Delegator delegator = (Delegator) request.getAttribute("delegator");

Modified: ofbiz/ofbiz-framework/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/website/WebSiteProperties.java
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/website/WebSiteProperties.java?rev=1818494&r1=1818493&r2=1818494&view=diff
==============================================================================
--- ofbiz/ofbiz-framework/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/website/WebSiteProperties.java (original)
+++ ofbiz/ofbiz-framework/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/website/WebSiteProperties.java Sun Dec 17 16:47:18 2017
@@ -65,6 +65,7 @@ public final class WebSiteProperties {
             String httpsPort = defaults.getHttpsPort();
             String httpsHost = defaults.getHttpsHost();
             boolean enableHttps = defaults.getEnableHttps();
+            String webappPath = null;
             if (delegator != null) {
                 String webSiteId = WebSiteWorker.getWebSiteId(request);
                 if (webSiteId != null) {
@@ -85,6 +86,12 @@ public final class WebSiteProperties {
                         if (webSiteValue.get("enableHttps") != null) {
                             enableHttps = webSiteValue.getBoolean("enableHttps");
                         }
+                        if (webSiteValue.get("webappPath") != null) {
+                            webappPath = webSiteValue.getString("webappPath");
+                            if (webappPath.endsWith("/")) {
+                                webappPath = webappPath.substring(0, webappPath.length() - 1);
+                            }
+                        }
                     }
                 }
             }
@@ -101,7 +108,7 @@ public final class WebSiteProperties {
             if (httpsHost.isEmpty()) {
                 httpsHost = request.getServerName();
             }
-            
+
             if (Start.getInstance().getConfig().portOffset != 0) {
                 Integer httpPortValue = Integer.valueOf(httpPort);
                 httpPortValue += Start.getInstance().getConfig().portOffset;
@@ -115,7 +122,7 @@ public final class WebSiteProperties {
                 }
             }
             
-            webSiteProps = new WebSiteProperties(httpPort, httpHost, httpsPort, httpsHost, enableHttps);
+            webSiteProps = new WebSiteProperties(httpPort, httpHost, httpsPort, httpsHost, webappPath, enableHttps);
             request.setAttribute("_WEBSITE_PROPS_", webSiteProps);
         }
         return webSiteProps;
@@ -137,6 +144,7 @@ public final class WebSiteProperties {
         String httpHost = (webSiteValue.get("httpHost") != null) ? webSiteValue.getString("httpHost") : defaults.getHttpHost();
         String httpsPort = (webSiteValue.get("httpsPort") != null) ? webSiteValue.getString("httpsPort") : defaults.getHttpsPort();
         String httpsHost = (webSiteValue.get("httpsHost") != null) ? webSiteValue.getString("httpsHost") : defaults.getHttpsHost();
+        String webappPath = (webSiteValue.get("webappPath") != null) ? webSiteValue.getString("webappPath") : null;
         boolean enableHttps = (webSiteValue.get("enableHttps") != null) ? webSiteValue.getBoolean("enableHttps") : defaults.getEnableHttps();
 
         if (Start.getInstance().getConfig().portOffset != 0) {
@@ -148,13 +156,14 @@ public final class WebSiteProperties {
             httpsPort = httpsPortValue.toString();
         }
         
-        return new WebSiteProperties(httpPort, httpHost, httpsPort, httpsHost, enableHttps);
+        return new WebSiteProperties(httpPort, httpHost, httpsPort, httpsHost, webappPath, enableHttps);
     }
 
     private final String httpPort;
     private final String httpHost;
     private final String httpsPort;
     private final String httpsHost;
+    private final String webappPath;
     private final boolean enableHttps;
 
     private WebSiteProperties(Delegator delegator) {
@@ -162,14 +171,16 @@ public final class WebSiteProperties {
         this.httpHost = EntityUtilProperties.getPropertyValue("url", "force.http.host", delegator);
         this.httpsPort = EntityUtilProperties.getPropertyValue("url", "port.https", delegator);
         this.httpsHost = EntityUtilProperties.getPropertyValue("url", "force.https.host", delegator);
+        this.webappPath = null;
         this.enableHttps = EntityUtilProperties.propertyValueEqualsIgnoreCase("url", "port.https.enabled", "Y", delegator);
     }
 
-    private WebSiteProperties(String httpPort, String httpHost, String httpsPort, String httpsHost, boolean enableHttps) {
+    private WebSiteProperties(String httpPort, String httpHost, String httpsPort, String httpsHost, String webappPath, boolean enableHttps) {
         this.httpPort = httpPort;
         this.httpHost = httpHost;
         this.httpsPort = httpsPort;
         this.httpsHost = httpsHost;
+        this.webappPath = webappPath;
         this.enableHttps = enableHttps;
     }
 
@@ -208,6 +219,13 @@ public final class WebSiteProperties {
         return enableHttps;
     }
 
+    /**
+     * Returns the configured webapp path on website linked to webapp or null.
+     */
+    public String getWebappPath() {
+        return webappPath;
+    }
+
     @Override
     public String toString() {
         StringBuilder sb = new StringBuilder("{httpPort=");
@@ -215,6 +233,7 @@ public final class WebSiteProperties {
         sb.append("httpHost=").append(httpHost).append(", ");
         sb.append("httpsPort=").append(httpsPort).append(", ");
         sb.append("httpsHost=").append(httpsHost).append(", ");
+        sb.append("webappPath=").append(webappPath).append(", ");
         sb.append("enableHttps=").append(enableHttps).append("}");
         return sb.toString();
     }