content: package org.zeus.common;
  
  import org.springframework.security.authentication.AbstractAuthenticationToken;
  import org.springframework.security.core.GrantedAuthority;
  
  import java.util.Collection;
  
  public class SmsCodeAuthenticationToken extends AbstractAuthenticationToken {
      private static final long serialVersionUID = 2383092775910246006L;
  
      /**
       * 手机号
       */
      private final Object principal;
  
      /**
       * SmsCodeAuthenticationFilter中构建的未认证的Authentication
       * @param mobile
       */
      public SmsCodeAuthenticationToken(String mobile) {
          super(null);
          this.principal = mobile;
          setAuthenticated(false);
      }
  
      /**
       * SmsCodeAuthenticationProvider中构建已认证的Authentication
       * @param principal
       * @param authorities
       */
      public SmsCodeAuthenticationToken(Object principal,
                                        Collection<? extends GrantedAuthority> authorities) {
          super(authorities);
          this.principal = principal;
          super.setAuthenticated(true); // must use super, as we override
      }
  
      @Override
      public Object getCredentials() {
          return null;
      }
  
      @Override
      public Object getPrincipal() {
          return this.principal;
      }
  
      /**
       * @param isAuthenticated
       * @throws IllegalArgumentException
       */
      public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException {
          if (isAuthenticated) {
              throw new IllegalArgumentException(
                  "Cannot set this token to trusted - use constructor which takes a GrantedAuthority list instead");
          }
  
          super.setAuthenticated(false);
      }
  
      @Override
      public void eraseCredentials() {
          super.eraseCredentials();
      }
  }
  