Save This Page
Home » apache-tomcat-6.0.16-src » org.apache » catalina » realm » [javadoc | source]
    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements.  See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache License, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License.  You may obtain a copy of the License at
    8    * 
    9    *      http://www.apache.org/licenses/LICENSE-2.0
   10    * 
   11    * Unless required by applicable law or agreed to in writing, software
   12    * distributed under the License is distributed on an "AS IS" BASIS,
   13    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   14    * See the License for the specific language governing permissions and
   15    * limitations under the License.
   16    */
   17   
   18   
   19   package org.apache.catalina.realm;
   20   
   21   
   22   import java.security.Principal;
   23   import java.util.Arrays;
   24   import java.util.List;
   25   import org.apache.catalina.Realm;
   26   
   27   
   28   /**
   29    * Generic implementation of <strong>java.security.Principal</strong> that
   30    * is available for use by <code>Realm</code> implementations.
   31    *
   32    * @author Craig R. McClanahan
   33    * @version $Revision: 543691 $ $Date: 2007-06-02 03:37:08 +0200 (sam., 02 juin 2007) $
   34    */
   35   
   36   public class GenericPrincipal implements Principal {
   37   
   38   
   39       // ----------------------------------------------------------- Constructors
   40   
   41   
   42       /**
   43        * Construct a new Principal, associated with the specified Realm, for the
   44        * specified username and password.
   45        *
   46        * @param realm The Realm that owns this Principal
   47        * @param name The username of the user represented by this Principal
   48        * @param password Credentials used to authenticate this user
   49        */
   50       public GenericPrincipal(Realm realm, String name, String password) {
   51   
   52           this(realm, name, password, null);
   53   
   54       }
   55   
   56   
   57       /**
   58        * Construct a new Principal, associated with the specified Realm, for the
   59        * specified username and password, with the specified role names
   60        * (as Strings).
   61        *
   62        * @param realm The Realm that owns this principal
   63        * @param name The username of the user represented by this Principal
   64        * @param password Credentials used to authenticate this user
   65        * @param roles List of roles (must be Strings) possessed by this user
   66        */
   67       public GenericPrincipal(Realm realm, String name, String password,
   68                               List<String> roles) {
   69           this(realm, name, password, roles, null);
   70       }
   71   
   72       /**
   73        * Construct a new Principal, associated with the specified Realm, for the
   74        * specified username and password, with the specified role names
   75        * (as Strings).
   76        *
   77        * @param realm The Realm that owns this principal
   78        * @param name The username of the user represented by this Principal
   79        * @param password Credentials used to authenticate this user
   80        * @param roles List of roles (must be Strings) possessed by this user
   81        * @param userPrincipal - the principal to be returned from the request 
   82        *        getUserPrincipal call if not null; if null, this will be returned
   83        */
   84       public GenericPrincipal(Realm realm, String name, String password,
   85                               List<String> roles, Principal userPrincipal) {
   86   
   87           super();
   88           this.realm = realm;
   89           this.name = name;
   90           this.password = password;
   91           this.userPrincipal = userPrincipal;
   92           if (roles != null) {
   93               this.roles = new String[roles.size()];
   94               this.roles = (String[]) roles.toArray(this.roles);
   95               if (this.roles.length > 0)
   96                   Arrays.sort(this.roles);
   97           }
   98       }
   99   
  100   
  101       // ------------------------------------------------------------- Properties
  102   
  103   
  104       /**
  105        * The username of the user represented by this Principal.
  106        */
  107       protected String name = null;
  108   
  109       public String getName() {
  110           return (this.name);
  111       }
  112   
  113   
  114       /**
  115        * The authentication credentials for the user represented by
  116        * this Principal.
  117        */
  118       protected String password = null;
  119   
  120       public String getPassword() {
  121           return (this.password);
  122       }
  123   
  124   
  125       /**
  126        * The Realm with which this Principal is associated.
  127        */
  128       protected Realm realm = null;
  129   
  130       public Realm getRealm() {
  131           return (this.realm);
  132       }
  133   
  134       void setRealm( Realm realm ) {
  135           this.realm=realm;
  136       }
  137   
  138   
  139       /**
  140        * The set of roles associated with this user.
  141        */
  142       protected String roles[] = new String[0];
  143   
  144       public String[] getRoles() {
  145           return (this.roles);
  146       }
  147   
  148   
  149       /**
  150        * The authenticated Principal to be exposed to applications.
  151        */
  152       protected Principal userPrincipal = null;
  153   
  154       public Principal getUserPrincipal() {
  155           if (userPrincipal != null) {
  156               return userPrincipal;
  157           } else {
  158               return this;
  159           }
  160       }
  161   
  162   
  163       // --------------------------------------------------------- Public Methods
  164   
  165   
  166       /**
  167        * Does the user represented by this Principal possess the specified role?
  168        *
  169        * @param role Role to be tested
  170        */
  171       public boolean hasRole(String role) {
  172   
  173           if("*".equals(role)) // Special 2.4 role meaning everyone
  174               return true;
  175           if (role == null)
  176               return (false);
  177           return (Arrays.binarySearch(roles, role) >= 0);
  178   
  179       }
  180   
  181   
  182       /**
  183        * Return a String representation of this object, which exposes only
  184        * information that should be public.
  185        */
  186       public String toString() {
  187   
  188           StringBuffer sb = new StringBuffer("GenericPrincipal[");
  189           sb.append(this.name);
  190           sb.append("(");
  191           for( int i=0;i<roles.length; i++ ) {
  192               sb.append( roles[i]).append(",");
  193           }
  194           sb.append(")]");
  195           return (sb.toString());
  196   
  197       }
  198   
  199   
  200   }

Save This Page
Home » apache-tomcat-6.0.16-src » org.apache » catalina » realm » [javadoc | source]