code: public final boolean abort()
          throws LoginException
      {
          boolean ret = false;
  
          if (this.person != null)  {
              if (XMLUserLoginModule.LOG.isDebugEnabled())  {
                  XMLUserLoginModule.LOG.debug("abort of " + this.person);
              }
              this.subject.getPrincipals().remove(this.person);
              for (final XMLRolePrincipal principal : this.person.getRoles())  {
                  this.subject.getPrincipals().remove(principal);
              }
              for (final XMLGroupPrincipal principal : this.person.getGroups())  {
                  this.subject.getPrincipals().remove(principal);
              }
              this.person = null;
              ret = true;
          }
          return ret;
      }
docs: Method to abort the authentication process (phase 2).
  
  <p> This method is called if the LoginContext's
  overall authentication failed.
  (the relevant REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL LoginModules
  did not succeed).
  
  <p> If this LoginModule's own authentication attempt
  succeeded (checked by retrieving the private state saved by the
  <code>login</code> method), then this method cleans up any state
  that was originally saved.
  
  <p>
  
  @exception LoginException if the abort fails
  
  @return true if this method succeeded, or false if this
  <code>LoginModule</code> should be ignored.