Home | History | Annotate | Download | only in auth
      1 /*
      2  * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
      3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
      4  *
      5  * This code is free software; you can redistribute it and/or modify it
      6  * under the terms of the GNU General Public License version 2 only, as
      7  * published by the Free Software Foundation.  Oracle designates this
      8  * particular file as subject to the "Classpath" exception as provided
      9  * by Oracle in the LICENSE file that accompanied this code.
     10  *
     11  * This code is distributed in the hope that it will be useful, but WITHOUT
     12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
     13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     14  * version 2 for more details (a copy is included in the LICENSE file that
     15  * accompanied this code).
     16  *
     17  * You should have received a copy of the GNU General Public License version
     18  * 2 along with this work; if not, write to the Free Software Foundation,
     19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
     20  *
     21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
     22  * or visit www.oracle.com if you need additional information or have any
     23  * questions.
     24  */
     25 
     26 package javax.security.auth;
     27 
     28 /**
     29  * Objects such as credentials may optionally implement this interface
     30  * to provide the capability to destroy its contents.
     31  *
     32  * @see javax.security.auth.Subject
     33  */
     34 public interface Destroyable {
     35 
     36     /**
     37      * Destroy this {@code Object}.
     38      *
     39      * <p> Sensitive information associated with this {@code Object}
     40      * is destroyed or cleared.  Subsequent calls to certain methods
     41      * on this {@code Object} will result in an
     42      * {@code IllegalStateException} being thrown.
     43      *
     44      * <p>
     45      * The default implementation throws {@code DestroyFailedException}.
     46      *
     47      * <p>
     48      * Android note: Up to and including API 25 this method did not have a
     49      * default implementation. Implementations of this interface must provide
     50      * a concrete implementation of this method in order to work on older
     51      * versions of Android.
     52      *
     53      * @exception DestroyFailedException if the destroy operation fails. <p>
     54      *
     55      * @exception SecurityException if the caller does not have permission
     56      *          to destroy this {@code Object}.
     57      */
     58     public default void destroy() throws DestroyFailedException {
     59         throw new DestroyFailedException();
     60     }
     61 
     62     /**
     63      * Determine if this {@code Object} has been destroyed.
     64      *
     65      * <p>
     66      * The default implementation returns false.
     67      *
     68      * <p>
     69      * Android note: Up to and including API 25 this method did not have a
     70      * default implementation. Implementations of this interface must provide
     71      * a concrete implementation of this method in order to work on older
     72      * versions of Android.
     73      *
     74      * @return true if this {@code Object} has been destroyed,
     75      *          false otherwise.
     76      */
     77     public default boolean isDestroyed() {
     78         return false;
     79     }
     80 }
     81