You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by pa...@apache.org on 2018/01/19 20:22:15 UTC

svn commit: r1821706 - /myfaces/core/branches/2.3.x/shared/src/main/java/org/apache/myfaces/shared/application/FacesServletMappingUtils.java

Author: paulnicolucci
Date: Fri Jan 19 20:22:14 2018
New Revision: 1821706

URL: http://svn.apache.org/viewvc?rev=1821706&view=rev
Log:
MYFACES-4191 : non-faces request fix

Modified:
    myfaces/core/branches/2.3.x/shared/src/main/java/org/apache/myfaces/shared/application/FacesServletMappingUtils.java

Modified: myfaces/core/branches/2.3.x/shared/src/main/java/org/apache/myfaces/shared/application/FacesServletMappingUtils.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.3.x/shared/src/main/java/org/apache/myfaces/shared/application/FacesServletMappingUtils.java?rev=1821706&r1=1821705&r2=1821706&view=diff
==============================================================================
--- myfaces/core/branches/2.3.x/shared/src/main/java/org/apache/myfaces/shared/application/FacesServletMappingUtils.java (original)
+++ myfaces/core/branches/2.3.x/shared/src/main/java/org/apache/myfaces/shared/application/FacesServletMappingUtils.java Fri Jan 19 20:22:14 2018
@@ -151,56 +151,79 @@ public class FacesServletMappingUtils
             Map<String, ? extends ServletRegistration> map = servletContext.getServletRegistrations();
             if (map != null)
             {
+                FacesServletMapping facesExtensionMapping = null;
+                FacesServletMapping facesPrefixMapping = null;
+                FacesServletMapping facesExactMapping = null;
+                
                 for (Map.Entry<String, ? extends ServletRegistration> entry : map.entrySet())
                 {
                     try
                     {
+                        Collection<String> mappings = entry.getValue().getMappings();
+                        
                         if (isFacesServlet(facesContext, (String)entry.getValue().getClassName()))
                         {
-                            Collection<String> mappings = entry.getValue().getMappings();
-                            FacesServletMapping extensionMapping = null;
-                            FacesServletMapping prefixMapping = null;
-                            FacesServletMapping exactMapping = null;
                             for (String mapping : mappings)
                             {
                                 if (mapping.startsWith("*."))
                                 {
                                     // extension mapping, use it.
-                                    extensionMapping = FacesServletMapping.createExtensionMapping(
+                                    facesExtensionMapping = FacesServletMapping.createExtensionMapping(
                                             mapping.substring(1));
                                 }
                                 else if (mapping.startsWith("/") && mapping.endsWith("/*"))
                                 {
                                     // prefix mapping, use it.
-                                    prefixMapping = FacesServletMapping.createPrefixMapping(
+                                    facesPrefixMapping = FacesServletMapping.createPrefixMapping(
                                             mapping.substring(0, mapping.length()-2));
                                 }
                                 else if (allowExactMatch && mapping.startsWith("/") && mapping.equals(servletPath))
                                 {
-                                    exactMapping = FacesServletMapping.createPrefixMapping(servletPath);
+                                    facesExactMapping = FacesServletMapping.createPrefixMapping(servletPath);
                                 }
-                            }
-                            // Choose exact mapping if preferred.
-                            if (allowExactMatch && exactMapping != null)
-                            {
-                                return exactMapping;
-                            }
-                            else if (prefixMapping != null)
-                            {
-                                return prefixMapping;
-                            }
-                            else if (extensionMapping != null)
-                            {
-                                return extensionMapping;
-                            }
+                            }                            
                         }
+                        else
+                        {
+                            //This is not a FacesServlet mapping.  It could be a non-faces request
+                            //Need to look for exact mapping to servletPath
+                            String servletPrefixMapping = null;
+                            for (String mapping : mappings)
+                            {                                
+                                if (mapping.startsWith("/") && mapping.endsWith("/*"))
+                                {
+                                    mapping = mapping.substring(0, mapping.length()-2);
+                                }                                
+                                if (mapping.equals(servletPath))
+                                {
+                                    return FacesServletMapping.createPrefixMapping(mapping);
+                                }
+                            }
+                       }
                     }
                     catch (Exception ex)
                     {
                         //No op
                     }
                 }
-                return FacesServletMapping.createPrefixMapping(servletPath);
+
+                // Choose exact mapping if preferred.
+                if (allowExactMatch && facesExactMapping != null)
+                {
+                    return facesExactMapping;
+                }
+                else if (facesPrefixMapping != null)
+                {
+                    return facesPrefixMapping;
+                }
+                else if (facesExtensionMapping != null)
+                {
+                    return facesExtensionMapping;
+                }
+                else
+                {
+                    return FacesServletMapping.createPrefixMapping(servletPath);
+                }
             }
             else
             {