Create parser pool interface and move current pool to an implementation of this inter...
[java-idp.git] / src / edu / internet2 / middleware / shibboleth / utils / KerberosPrincipalFilter.java
index 22a9681..20e64df 100644 (file)
@@ -1,50 +1,17 @@
 /*
- * The Shibboleth License, Version 1.
- * Copyright (c) 2002
- * University Corporation for Advanced Internet Development, Inc.
- * All rights reserved
+ * Copyright [2005] [University Corporation for Advanced Internet Development, Inc.]
  *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
  *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
+ * http://www.apache.org/licenses/LICENSE-2.0
  *
- * Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution, if any, must include
- * the following acknowledgment: "This product includes software developed by
- * the University Corporation for Advanced Internet Development
- * <http://www.ucaid.edu>Internet2 Project. Alternately, this acknowledegement
- * may appear in the software itself, if and wherever such third-party
- * acknowledgments normally appear.
- *
- * Neither the name of Shibboleth nor the names of its contributors, nor
- * Internet2, nor the University Corporation for Advanced Internet Development,
- * Inc., nor UCAID may be used to endorse or promote products derived from this
- * software without specific prior written permission. For written permission,
- * please contact shibboleth@shibboleth.org
- *
- * Products derived from this software may not be called Shibboleth, Internet2,
- * UCAID, or the University Corporation for Advanced Internet Development, nor
- * may Shibboleth appear in their name, without prior written permission of the
- * University Corporation for Advanced Internet Development.
- *
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND WITH ALL FAULTS. ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE, AND NON-INFRINGEMENT ARE DISCLAIMED AND THE ENTIRE RISK
- * OF SATISFACTORY QUALITY, PERFORMANCE, ACCURACY, AND EFFORT IS WITH LICENSEE.
- * IN NO EVENT SHALL THE COPYRIGHT OWNER, CONTRIBUTORS OR THE UNIVERSITY
- * CORPORATION FOR ADVANCED INTERNET DEVELOPMENT, INC. BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 
 package edu.internet2.middleware.shibboleth.utils;
@@ -67,7 +34,7 @@ import org.apache.log4j.MDC;
 
 /**
  * Simple Servlet Filter that strips realm information from Kerberos authenticated container-managed security
- *
+ * 
  * @author Scott Cantor
  */
 public class KerberosPrincipalFilter implements Filter {
@@ -78,39 +45,48 @@ public class KerberosPrincipalFilter implements Filter {
         * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
         */
        public void init(FilterConfig config) throws ServletException {
+
        }
 
        /**
-        * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
+        * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse,
+        *      javax.servlet.FilterChain)
         */
-       public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
-               throws IOException, ServletException {
+       public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
+                       ServletException {
+
                if (!(request instanceof HttpServletRequest) || !(response instanceof HttpServletResponse)) {
-            MDC.put("serviceId", "[Kerberos Principal Filter]");
+                       MDC.put("serviceId", "[Kerberos Principal Filter]");
                        log.error("Only HTTP(s) requests are supported by the KerberosPrincipalFilter.");
                        return;
                }
                HttpServletRequest httpRequest = (HttpServletRequest) request;
 
-        String name = httpRequest.getRemoteUser();
-        int split = name.indexOf('@');
-        if (split > -1)
-            name = name.substring(0,split);
-        
-               chain.doFilter(new KerberosPrincipalWrapper(httpRequest, new PrincipalImpl(name)), response);
+               String name = httpRequest.getRemoteUser();
+               if (name != null) {
+                       int split = name.indexOf('@');
+                       if (split > -1) {
+                               name = name.substring(0, split);
+                               chain.doFilter(new KerberosPrincipalWrapper(httpRequest, new PrincipalImpl(name)), response);
+                               return;
+                       }
+               }
+               chain.doFilter(request, response);
        }
 
        /**
         * @see javax.servlet.Filter#destroy()
         */
        public void destroy() {
+
        }
 
        class KerberosPrincipalWrapper extends HttpServletRequestWrapper {
 
                Principal principal;
 
-        KerberosPrincipalWrapper(HttpServletRequest request, Principal principal) {
+               KerberosPrincipalWrapper(HttpServletRequest request, Principal principal) {
+
                        super(request);
                        this.principal = principal;
                }
@@ -119,6 +95,7 @@ public class KerberosPrincipalFilter implements Filter {
                 * @see javax.servlet.http.HttpServletRequest#getRemoteUser()
                 */
                public String getRemoteUser() {
+
                        return principal.getName();
                }
 
@@ -126,36 +103,43 @@ public class KerberosPrincipalFilter implements Filter {
                 * @see javax.servlet.http.HttpServletRequest#getUserPrincipal()
                 */
                public Principal getUserPrincipal() {
+
                        return principal;
                }
        }
 
-    class PrincipalImpl implements Principal {
-        
-        private String name = null;
-
-        PrincipalImpl(String name) {
-            this.name=name;
-        }
-        /**
-         * @see java.security.Principal#getName()
-         */
-        public String getName() {
-            return name;
-        }
-        /**
-         * @see java.lang.Object#equals(java.lang.Object)
-         */
-        public boolean equals(Object obj) {
-            return name.equals(obj);
-        }
-
-        /**
-         * @see java.lang.Object#toString()
-         */
-        public String toString() {
-            return name;
-        }
-
-    }
+       class PrincipalImpl implements Principal {
+
+               private String name = null;
+
+               PrincipalImpl(String name) {
+
+                       this.name = name;
+               }
+
+               /**
+                * @see java.security.Principal#getName()
+                */
+               public String getName() {
+
+                       return name;
+               }
+
+               /**
+                * @see java.lang.Object#equals(java.lang.Object)
+                */
+               public boolean equals(Object obj) {
+
+                       return name.equals(obj);
+               }
+
+               /**
+                * @see java.lang.Object#toString()
+                */
+               public String toString() {
+
+                       return name;
+               }
+
+       }
 }