subjectdelegator.java

来自「JAVA的一些源码 JAVA2 STANDARD EDITION DEVELO」· Java 代码 · 共 97 行

JAVA
97
字号
/*  * @(#)SubjectDelegator.java	1.3 04/05/27 *  * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package com.sun.jmx.remote.security;import java.security.AccessController;import java.security.AccessControlContext;import java.security.Permission;import java.security.Principal;import java.security.PrivilegedAction;import javax.security.auth.Subject;import javax.management.remote.SubjectDelegationPermission;import com.sun.jmx.remote.util.CacheMap;public class SubjectDelegator {    private static final int PRINCIPALS_CACHE_SIZE = 10;    private static final int ACC_CACHE_SIZE = 10;    private CacheMap principalsCache;    private CacheMap accCache;    /* Return the AccessControlContext appropriate to execute an       operation on behalf of the delegatedSubject.  If the       authenticatedAccessControlContext does not have permission to       delegate to that subject, throw SecurityException.  */    public synchronized AccessControlContext	delegatedContext(AccessControlContext authenticatedACC,			 Subject delegatedSubject)	    throws SecurityException {	if (principalsCache == null || accCache == null) {	    principalsCache = new CacheMap(PRINCIPALS_CACHE_SIZE);	    accCache = new CacheMap(ACC_CACHE_SIZE);	}	// Retrieve the principals for the given	// delegated subject from the cache	//	Principal[] delegatedPrincipals = (Principal[])	    principalsCache.get(delegatedSubject);	// Convert the set of principals stored in the	// delegated subject into an array of principals	// and store it in the cache	//	if (delegatedPrincipals == null) {	    delegatedPrincipals = (Principal[])		delegatedSubject.getPrincipals().toArray(new Principal[0]);	    principalsCache.put(delegatedSubject, delegatedPrincipals);	}	// Retrieve the access control context for the	// given delegated subject from the cache	//	AccessControlContext delegatedACC = (AccessControlContext)	    accCache.get(delegatedSubject);	// Build the access control context to be used	// when executing code as the delegated subject	// and store it in the cache	//	if (delegatedACC == null) {	    delegatedACC =		JMXSubjectDomainCombiner.getContext(delegatedSubject);	    accCache.put(delegatedSubject, delegatedACC);	}	// Check if the subject delegation permission allows the	// authenticated subject to assume the identity of each	// principal in the delegated subject	//	final Principal[] dp = delegatedPrincipals;	PrivilegedAction action =	    new PrivilegedAction() {		public Object run() {		    for (int i = 0 ; i < dp.length ; i++) {			final String pname =			    dp[i].getClass().getName() + "." + dp[i].getName();			Permission sdp =			    new SubjectDelegationPermission(pname);			AccessController.checkPermission(sdp);		    }		    return null;		}	    };	AccessController.doPrivileged(action, authenticatedACC);	return delegatedACC;    }}

⌨️ 快捷键说明

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