⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kerberosticket.java

📁 Mobile 应用程序使用 Java Micro Edition (Java ME) 平台
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    /**      * Determines is this ticket is a proxy-ticket.     *     * @return true if this ticket is a proxy-ticket, false if not.     */    public final boolean isProxy() {	return flags[PROXY_TICKET_FLAG];    }    /**      * Determines is this ticket is post-dated.     *     * @return true if this ticket is post-dated, false if not.     */    public final boolean isPostdated() {	return flags[POSTDATED_TICKET_FLAG];    }    /**      * Determines is this ticket is renewable. If so, the {@link #refresh()      * refresh} method can be called, assuming the validity period for     * renewing is not already over.     *     * @return true if this ticket is renewable, false if not.     */    public final boolean isRenewable() {	return flags[RENEWABLE_TICKET_FLAG];    }    /**      * Determines if this ticket was issued using the Kerberos AS-Exchange     * protocol, and not issued based on some ticket-granting ticket.     *     * @return true if this ticket was issued using the Kerberos AS-Exchange     * protocol, false if not.     */    public final boolean isInitial() {	return flags[INITIAL_TICKET_FLAG];    }    /**     * Returns the flags associated with this ticket. Each element in the     * returned array indicates the value for the corresponding bit in the     * ASN.1 BitString that represents the ticket flags.     *     * @return the flags associated with this ticket.     */    public final boolean[]  getFlags() {	return (flags == null? null: (boolean[]) flags.clone());    }    /**     * Returns the time that the client was authenticated.     *     * @return the time that the client was authenticated     *         or null if not set.     */    public final java.util.Date getAuthTime() {	return (authTime == null) ? null : new Date(authTime.getTime());    }    /**     * Returns the start time for this ticket's validity period.     *     * @return the start time for this ticket's validity period     *         or null if not set.     */    public final java.util.Date getStartTime() {	return (startTime == null) ? null : new Date(startTime.getTime());    }    /**     * Returns the expiration time for this ticket's validity period.     *     * @return the expiration time for this ticket's validity period.     */    public final java.util.Date getEndTime() {	return endTime;    }    /**     * Returns the latest expiration time for this ticket, including all     * renewals. This will return a null value for non-renewable tickets.     *     * @return the latest expiration time for this ticket.     */    public final java.util.Date getRenewTill() {	return (renewTill == null) ? null: new Date(renewTill.getTime());    }        /**     * Returns a list of addresses from where the ticket can be used.     *      * @return ths list of addresses or null, if the field was not     * provided.     */    public final java.net.InetAddress[] getClientAddresses() {	return (clientAddresses == null? 		null: (InetAddress[]) clientAddresses.clone());    }    /**     * Returns an ASN.1 encoding of the entire ticket.     *     * @return an ASN.1 encoding of the entire ticket.     */    public final byte[] getEncoded() {	if (destroyed)	    throw new IllegalStateException("This ticket is no longer valid");	return (byte[]) asn1Encoding.clone();    }    /** Determines if this ticket is still current.  */    public boolean isCurrent() {	return (System.currentTimeMillis() <= getEndTime().getTime());    }    /**     * Extends the validity period of this ticket. The ticket will contain     * a new session key if the refresh operation succeeds. The refresh     * operation will fail if the ticket is not renewable or the latest     * allowable renew time has passed. Any other error returned by the     * KDC will also cause this method to fail.     *     * Note: This method is not synchronized with the the accessor     * methods of this object. Hence callers need to be aware of multiple     * threads that might access this and try to renew it at the same     * time.     *     * @throws RefreshFailedException if the ticket is not renewable, or     * the latest allowable renew time has passed, or the KDC returns some     * error.     *     * @see #isRenewable()     * @see #getRenewTill()     */    public void refresh() throws RefreshFailedException {	if (destroyed)	    throw new RefreshFailedException("A destroyed ticket "					     + "cannot be renewd.");	if (!isRenewable())	    throw new RefreshFailedException("This ticket is not renewable");	if (System.currentTimeMillis() > getRenewTill().getTime())	    throw new RefreshFailedException("This ticket is past "					     + "its last renewal time.");	Throwable e = null;	sun.security.krb5.Credentials krb5Creds = null;	try {	    krb5Creds = new sun.security.krb5.Credentials(asn1Encoding,						    client.toString(),						    server.toString(),						    sessionKey.getEncoded(),						    sessionKey.getKeyType(),						    flags,						    authTime,						    startTime,						    endTime,						    renewTill,						    clientAddresses);	    krb5Creds = krb5Creds.renew();	} catch (sun.security.krb5.KrbException krbException) {	    e = krbException;	} catch (java.io.IOException ioException) {	    e = ioException;	}	if (e != null) {	    RefreshFailedException rfException		= new RefreshFailedException("Failed to renew Kerberos Ticket "					     + "for client " + client 					     + " and server " + server					     + " - " + e.getMessage());	    rfException.initCause(e);	    throw rfException;	}	/*	 * In case multiple threads try to refresh it at the same time.	 */	synchronized (this) {	    try {		this.destroy();	    } catch (DestroyFailedException dfException) {		// Squelch it since we don't care about the old ticket.	    }	    init(krb5Creds.getEncoded(),		 new KerberosPrincipal(krb5Creds.getClient().getName()),		 new KerberosPrincipal(krb5Creds.getServer().getName()),		 krb5Creds.getSessionKey().getBytes(), 		 krb5Creds.getSessionKey().getEType(), 		 krb5Creds.getFlags(), 		 krb5Creds.getAuthTime(), 		 krb5Creds.getStartTime(), 		 krb5Creds.getEndTime(), 		 krb5Creds.getRenewTill(), 		 krb5Creds.getClientAddresses());	    destroyed = false;	}    }    /**     * Destroys the ticket and destroys any sensitive information stored in     * it.     */    public void destroy() throws DestroyFailedException {	if (!destroyed) {	    Arrays.fill(asn1Encoding, (byte) 0);	    client = null;	    server = null;	    sessionKey.destroy();	    flags = null;	    authTime = null;	    startTime = null;	    endTime = null;	    renewTill = null;	    clientAddresses = null;	    destroyed = true;	}    }    /**      * Determines if this ticket has been destroyed.     */    public boolean isDestroyed() {	return destroyed;    }    public String toString() {	if (destroyed)	    throw new IllegalStateException("This ticket is no longer valid");	StringBuffer caddrBuf = new StringBuffer();	if (clientAddresses != null) {	    for (int i = 0; i < clientAddresses.length; i++) {		caddrBuf.append("clientAddresses[" + i + "] = " + 				 clientAddresses[i].toString());	    }	}	return ("Ticket (hex) = " + "\n" +		 (new HexDumpEncoder()).encodeBuffer(asn1Encoding) + "\n" +		"Client Principal = " + client.toString() + "\n" +		"Server Principal = " + server.toString() + "\n" +		"Session Key = " + sessionKey.toString() + "\n" +		"Forwardable Ticket " + flags[FORWARDABLE_TICKET_FLAG] + "\n" +		"Forwarded Ticket " + flags[FORWARDED_TICKET_FLAG] + "\n" +	        "Proxiable Ticket " + flags[PROXIABLE_TICKET_FLAG] + "\n" +	        "Proxy Ticket " + flags[PROXY_TICKET_FLAG] + "\n" +	        "Postdated Ticket " + flags[POSTDATED_TICKET_FLAG] + "\n" +	        "Renewable Ticket " + flags[RENEWABLE_TICKET_FLAG] + "\n" +	        "Initial Ticket " + flags[RENEWABLE_TICKET_FLAG] + "\n" +		"Auth Time = " + String.valueOf(authTime) + "\n" +		"Start Time = " + String.valueOf(startTime) + "\n" +		"End Time = " + endTime.toString() + "\n" +		"Renew Till = " + String.valueOf(renewTill) + "\n" +		"Client Addresses " +		(clientAddresses == null ? " Null " : caddrBuf.toString() +		"\n"));    }    /**     * Returns a hashcode for this KerberosTicket.      *     * @return a hashCode() for the <code>KerberosTicket</code>     * @since 1.6     */    public int hashCode() {        int result = 17;        if (isDestroyed()) {            return result;        }        result = result * 37 + Arrays.hashCode(getEncoded());        result = result * 37 + endTime.hashCode();        result = result * 37 + client.hashCode();        result = result * 37 + server.hashCode();        result = result * 37 + sessionKey.hashCode();                // authTime may be null        if (authTime != null) {            result = result * 37 + authTime.hashCode();        }        // startTime may be null        if (startTime != null) {            result = result * 37 + startTime.hashCode();        }        // renewTill may be null        if (renewTill != null) {            result = result * 37 + renewTill.hashCode();        }        // clientAddress may be null, the array's hashCode is 0        result = result * 37 + Arrays.hashCode(clientAddresses);        return result * 37 + Arrays.hashCode(flags);    }    /**     * Compares the specified Object with this KerberosTicket for equality.     * Returns true if the given object is also a      * <code>KerberosTicket</code> and the two     * <code>KerberosTicket</code> instances are equivalent.      *     * @param other the Object to compare to     * @return true if the specified object is equal to this KerberosTicket,     * false otherwise. NOTE: Returns false if either of the KerberosTicket     * objects has been destroyed.     * @since 1.6     */    public boolean equals(Object other) {	if (other == this)	    return true;	if (! (other instanceof KerberosTicket)) {	    return false;	}                KerberosTicket otherTicket = ((KerberosTicket) other);        if (isDestroyed() || otherTicket.isDestroyed()) {            return false;        }        if (!Arrays.equals(getEncoded(), otherTicket.getEncoded()) ||                !endTime.equals(otherTicket.getEndTime()) ||                !server.equals(otherTicket.getServer()) ||                !client.equals(otherTicket.getClient()) ||                !sessionKey.equals(otherTicket.getSessionKey()) ||                !Arrays.equals(clientAddresses, otherTicket.getClientAddresses()) ||                !Arrays.equals(flags, otherTicket.getFlags())) {            return false;        }	// authTime may be null        if (authTime == null) {            if (otherTicket.getAuthTime() != null)                return false;        } else {            if (!authTime.equals(otherTicket.getAuthTime()))                return false;        }	// startTime may be null        if (startTime == null) {            if (otherTicket.getStartTime() != null)                return false;        } else {            if (!startTime.equals(otherTicket.getStartTime()))                return false;        }        if (renewTill == null) {            if (otherTicket.getRenewTill() != null)                return false;        } else {            if (!renewTill.equals(otherTicket.getRenewTill()))                return false;        }        return true;    } }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -