View Javadoc

    1   /* Copyright 2004, 2005 Acegi Technology Pty Limited
    2    *
    3    * Licensed under the Apache License, Version 2.0 (the "License");
    4    * you may not use this file except in compliance with the License.
    5    * You may obtain a copy of the License at
    6    *
    7    *     http://www.apache.org/licenses/LICENSE-2.0
    8    *
    9    * Unless required by applicable law or agreed to in writing, software
    10   * distributed under the License is distributed on an "AS IS" BASIS,
    11   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12   * See the License for the specific language governing permissions and
    13   * limitations under the License.
    14   */
    15
    16  package org.acegisecurity.providers.rememberme;
    17
    18  import org.acegisecurity.GrantedAuthority;
    19  import org.acegisecurity.providers.AbstractAuthenticationToken;
    20
    21  import java.io.Serializable;
    22
    23  import org.springframework.util.Assert;
    24
    25
    26  /***
    27   * Represents a remembered <code>Authentication</code>.
    28   *
    29   * <p>
    30   * A remembered <code>Authentication</code> must provide a fully valid
    31   * <code>Authentication</code>, including the <code>GrantedAuthority</code>[]s
    32   * that apply.
    33   * </p>
    34   *
    35   * @author Ben Alex
    36   * @version $Id: RememberMeAuthenticationToken.java,v 1.4 2005/11/17 00:55:52 benalex Exp $
    37   */
    38  public class RememberMeAuthenticationToken extends AbstractAuthenticationToken
    39      implements Serializable {
    40      //~ Instance fields ========================================================
    41
    42      private Object principal;
    43      private GrantedAuthority[] authorities;
    44      private int keyHash;
    45  	private boolean authenticated;
    46
    47      //~ Constructors ===========================================================
    48
    49      /***
    50       * Constructor.
    51       *
    52       * @param key to identify if this object made by an authorised client
    53       * @param principal the principal (typically a <code>UserDetails</code>)
    54       * @param authorities the authorities granted to the principal
    55       *
    56       * @throws IllegalArgumentException if a <code>null</code> was passed
    57       */
    58      public RememberMeAuthenticationToken(String key, Object principal,
    59          GrantedAuthority[] authorities) {
    60          if ((key == null) || ("".equals(key)) || (principal == null)
    61              || "".equals(principal) || (authorities == null)
    62              || (authorities.length == 0)) {
    63              throw new IllegalArgumentException(
    64                  "Cannot pass null or empty values to constructor");
    65          }
    66
    67          for (int i = 0; i < authorities.length; i++) {
    68              Assert.notNull(authorities[i], "Granted authority element "
    69                      + i
    70                      + " is null - GrantedAuthority[] cannot contain any null elements");
    71          }
    72
    73          this.keyHash = key.hashCode();
    74          this.principal = principal;
    75          this.authorities = authorities;
    76  		this.authenticated = true;
    77      }
    78
    79      protected RememberMeAuthenticationToken() {
    80          throw new IllegalArgumentException("Cannot use default constructor");
    81      }
    82
    83      //~ Methods ================================================================
    84
    85      public void setAuthenticated(boolean isAuthenticated) {
    86          this.authenticated = isAuthenticated;
    87      }
    88
    89      public boolean isAuthenticated() {
    90          return this.authenticated;
    91      }
    92
    93      public GrantedAuthority[] getAuthorities() {
    94          return this.authorities;
    95      }
    96
    97      /***
    98       * Always returns an empty <code>String</code>
    99       *
    100      * @return an empty String
    101      */
    102     public Object getCredentials() {
    103         return "";
    104     }
    105
    106     public int getKeyHash() {
    107         return this.keyHash;
    108     }
    109
    110     public Object getPrincipal() {
    111         return this.principal;
    112     }
    113
    114     public boolean equals(Object obj) {
    115         if (!super.equals(obj)) {
    116             return false;
    117         }
    118
    119         if (obj instanceof RememberMeAuthenticationToken) {
    120             RememberMeAuthenticationToken test = (RememberMeAuthenticationToken) obj;
    121
    122             if (this.getKeyHash() != test.getKeyHash()) {
    123                 return false;
    124             }
    125
    126             return true;
    127         }
    128
    129         return false;
    130     }
    131 }