You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by wo...@apache.org on 2014/11/01 17:04:33 UTC

svn commit: r1635981 - in /portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/sso: JetspeedSSOUtils.java SSOInitHttpRequestCommand.java

Author: woonsan
Date: Sat Nov  1 16:04:32 2014
New Revision: 1635981

URL: http://svn.apache.org/r1635981
Log:
JS2-1302, JS2-1303, JS2-1304, JS2-1305

extract utility methods

Modified:
    portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/sso/JetspeedSSOUtils.java
    portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/sso/SSOInitHttpRequestCommand.java

Modified: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/sso/JetspeedSSOUtils.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/sso/JetspeedSSOUtils.java?rev=1635981&r1=1635980&r2=1635981&view=diff
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/sso/JetspeedSSOUtils.java (original)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/sso/JetspeedSSOUtils.java Sat Nov  1 16:04:32 2014
@@ -149,73 +149,157 @@ public class JetspeedSSOUtils
 
                 if (ssoSites != null)
                 {
-                    final URI inputURI = URI.create(url);
-                    URI siteURI = null;
+                    ssoSite = getBestMatchedSSOSite(ssoSites, URI.create(url));
+                }
+            }
+            catch (Exception e)
+            {
+                if (log.isDebugEnabled())
+                {
+                    log.warn("Failed to retrieve sso site.", e);
+                }
+                else
+                {
+                    log.warn("Failed to retrieve sso site. {}", e.toString());
+                }
+            }
+        }
+
+        return ssoSite;
+    }
+
+    public static SSOSite getBestMatchedSSOSite(Collection<SSOSite> ssoSites, final URI uri)
+    {
+        if (ssoSites == null || ssoSites.isEmpty())
+        {
+            return null;
+        }
 
-                    List<SSOSite> candidates = new ArrayList<SSOSite>();
+        SSOSite ssoSite = null;
+        URI siteURI = null;
 
-                    for (SSOSite candidate : ssoSites)
+        List<SSOSite> candidates = new ArrayList<SSOSite>();
+
+        for (SSOSite candidate : ssoSites)
+        {
+            siteURI = URI.create(candidate.getURL());
+
+            if (isEachFromSameOrigin(uri, siteURI))
+            {
+                candidates.add(candidate);
+            }
+        }
+
+        if (!candidates.isEmpty())
+        {
+            if (candidates.size() == 1)
+            {
+                ssoSite = candidates.get(0);
+            }
+            else
+            {
+                Collections.sort(candidates, new Comparator<SSOSite>() {
+                    @Override
+                    public int compare(SSOSite site1, SSOSite site2)
                     {
-                        siteURI = URI.create(candidate.getURL());
+                        URI uri1 = URI.create(site1.getURL());
+                        URI uri2 = URI.create(site2.getURL());
+                        int di1 = StringUtils.indexOfDifference(uri.getPath(), uri1.getPath());
+                        int di2 = StringUtils.indexOfDifference(uri.getPath(), uri2.getPath());
 
-                        if (StringUtils.equals(inputURI.getScheme(), siteURI.getScheme()) &&
-                                        StringUtils.equals(inputURI.getHost(), siteURI.getHost()) &&
-                                        inputURI.getPort() == siteURI.getPort())
+                        if (di1 == di2)
                         {
-                            candidates.add(candidate);
+                            return 0;
+                        }
+                        else if (di1 < di2)
+                        {
+                            return -1;
+                        }
+                        else
+                        {
+                            return 1;
                         }
                     }
+                });
+
+                ssoSite = candidates.get(candidates.size() - 1);
+            }
+        }
+
+        return ssoSite;
+    }
+
+    public static JetspeedSSOSiteCredentials getBestMatchedSSOSiteCrendentials(Collection<JetspeedSSOSiteCredentials> ssoSiteCredsList, final URI uri)
+    {
+        if (ssoSiteCredsList == null || ssoSiteCredsList.isEmpty())
+        {
+            return null;
+        }
+
+        JetspeedSSOSiteCredentials ssoSiteCreds = null;
+        URI siteURI = null;
 
-                    if (!candidates.isEmpty())
+        List<JetspeedSSOSiteCredentials> candidates = new ArrayList<JetspeedSSOSiteCredentials>();
+
+        for (JetspeedSSOSiteCredentials candidate : ssoSiteCredsList)
+        {
+            siteURI = candidate.getBaseURI();
+
+            if (isEachFromSameOrigin(uri, siteURI))
+            {
+                candidates.add(candidate);
+            }
+        }
+
+        if (!candidates.isEmpty())
+        {
+            if (candidates.size() == 1)
+            {
+                ssoSiteCreds = candidates.get(0);
+            }
+            else
+            {
+                Collections.sort(candidates, new Comparator<JetspeedSSOSiteCredentials>() {
+                    @Override
+                    public int compare(JetspeedSSOSiteCredentials creds1, JetspeedSSOSiteCredentials creds2)
                     {
-                        if (candidates.size() == 1)
+                        URI uri1 = creds1.getBaseURI();
+                        URI uri2 = creds2.getBaseURI();
+                        int di1 = StringUtils.indexOfDifference(uri.getPath(), uri1.getPath());
+                        int di2 = StringUtils.indexOfDifference(uri.getPath(), uri2.getPath());
+
+                        if (di1 == di2)
                         {
-                            ssoSite = candidates.get(0);
+                            return 0;
+                        }
+                        else if (di1 < di2)
+                        {
+                            return -1;
                         }
                         else
                         {
-                            Collections.sort(candidates, new Comparator<SSOSite>() {
-                                @Override
-                                public int compare(SSOSite site1, SSOSite site2)
-                                {
-                                    URI uri1 = URI.create(site1.getURL());
-                                    URI uri2 = URI.create(site2.getURL());
-                                    int di1 = StringUtils.indexOfDifference(inputURI.getPath(), uri1.getPath());
-                                    int di2 = StringUtils.indexOfDifference(inputURI.getPath(), uri2.getPath());
-
-                                    if (di1 == di2)
-                                    {
-                                        return 0;
-                                    }
-                                    else if (di1 < di2)
-                                    {
-                                        return -1;
-                                    }
-                                    else
-                                    {
-                                        return 1;
-                                    }
-                                }
-                            });
-
-                            ssoSite = candidates.get(candidates.size() - 1);
+                            return 1;
                         }
                     }
-                }
-            }
-            catch (Exception e)
-            {
-                if (log.isDebugEnabled())
-                {
-                    log.warn("Failed to retrieve sso site.", e);
-                }
-                else
-                {
-                    log.warn("Failed to retrieve sso site. {}", e.toString());
-                }
+                });
+
+                ssoSiteCreds = candidates.get(candidates.size() - 1);
             }
         }
 
-        return ssoSite;
+        return ssoSiteCreds;
     }
+
+    private static boolean isEachFromSameOrigin(URI uri1, URI uri2)
+    {
+        if (StringUtils.equals(uri1.getScheme(), uri2.getScheme()) &&
+                        StringUtils.equals(uri1.getHost(), uri2.getHost()) &&
+                        uri1.getPort() == uri2.getPort())
+        {
+            return true;
+        }
+
+        return false;
+    }
+
 }

Modified: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/sso/SSOInitHttpRequestCommand.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/sso/SSOInitHttpRequestCommand.java?rev=1635981&r1=1635980&r2=1635981&view=diff
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/sso/SSOInitHttpRequestCommand.java (original)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/sso/SSOInitHttpRequestCommand.java Sat Nov  1 16:04:32 2014
@@ -40,33 +40,24 @@ public class SSOInitHttpRequestCommand e
     @Override
     protected HttpRequestBase createHttpRequest(final ProxyContext context) throws ReverseProxyException, IOException
     {
-        List<JetspeedSSOSiteCredentials> ssoCredsList = getJetspeedSSOSiteCredentials(context);
+        List<JetspeedSSOSiteCredentials> ssoCredsList = getJetspeedFormSSOSiteCredentials(context);
+        URI remoteURI = context.getRemoteURI();
+        JetspeedSSOSiteCredentials ssoSiteCreds = JetspeedSSOUtils.getBestMatchedSSOSiteCrendentials(ssoCredsList, remoteURI);
 
-        if (ssoCredsList != null && !ssoCredsList.isEmpty())
+        if (ssoSiteCreds != null)
         {
-            for (JetspeedSSOSiteCredentials ssoCreds : ssoCredsList)
-            {
-                if (ssoCreds.isFormAuthentication())
-                {
-                    URI remoteURI = context.getRemoteURI();
-
-                    if (remoteURI != null && remoteURI.equals(ssoCreds.getBaseURI()))
-                    {
-                        HttpRequestBase httpRequest = new HttpPost(remoteURI);
-                        List <NameValuePair> formParams = new ArrayList<NameValuePair>();
-                        formParams.add(new BasicNameValuePair(ssoCreds.getFormUserField(), ssoCreds.getUsername()));
-                        formParams.add(new BasicNameValuePair(ssoCreds.getFormPwdField(), ssoCreds.getPassword()));
-                        ((HttpPost) httpRequest).setEntity(new UrlEncodedFormEntity(formParams));
-                        return httpRequest;
-                    }
-                }
-            }
+            HttpRequestBase httpRequest = new HttpPost(remoteURI);
+            List <NameValuePair> formParams = new ArrayList<NameValuePair>();
+            formParams.add(new BasicNameValuePair(ssoSiteCreds.getFormUserField(), ssoSiteCreds.getUsername()));
+            formParams.add(new BasicNameValuePair(ssoSiteCreds.getFormPwdField(), ssoSiteCreds.getPassword()));
+            ((HttpPost) httpRequest).setEntity(new UrlEncodedFormEntity(formParams));
+            return httpRequest;
         }
 
         return super.createHttpRequest(context);
     }
 
-    private List<JetspeedSSOSiteCredentials> getJetspeedSSOSiteCredentials(final ProxyContext context)
+    private List<JetspeedSSOSiteCredentials> getJetspeedFormSSOSiteCredentials(final ProxyContext context)
     {
         List<JetspeedSSOSiteCredentials> ssoCredsList = null;
 
@@ -76,6 +67,21 @@ public class SSOInitHttpRequestCommand e
             ssoCredsList = (List<JetspeedSSOSiteCredentials>) session.getAttribute(SSOReverseProxyIFramePortlet.SUBJECT_SSO_SITE_CREDS);
         }
 
-        return ssoCredsList;
+        if (ssoCredsList == null)
+        {
+            return null;
+        }
+
+        List<JetspeedSSOSiteCredentials> formCredsList = new ArrayList<JetspeedSSOSiteCredentials>();
+
+        for (JetspeedSSOSiteCredentials ssoCreds : ssoCredsList)
+        {
+            if (ssoCreds.isFormAuthentication())
+            {
+                formCredsList.add(ssoCreds);
+            }
+        }
+
+        return formCredsList;
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org