📄 policypermission.java
字号:
package com.ibm.aglets.security;/* * @(#)PolicyPermission.java * * IBM Confidential-Restricted * * OCO Source Materials * * 03L7246 (c) Copyright IBM Corp. 1996, 1998 * * The source code for this program is not published or otherwise * divested of its trade secrets, irrespective of what has been * deposited with the U.S. Copyright Office. */import java.security.Permission;import com.ibm.aglet.security.Protection;import java.lang.reflect.Constructor;import java.lang.reflect.InvocationTargetException;import java.util.Vector;import java.util.Enumeration;import java.util.StringTokenizer;import org.aglets.log.*;/** * The <tt>PolicyPermission</tt> class represents a permission in a grant * of Java policy database. * * @version 1.00 $Date: 2002/02/20 22:17:18 $ * @author ONO Kouichi */public class PolicyPermission { private static final LogCategory log = LogInitializer.getCategory(PolicyPermission.class.getName() ); private static final String CLASSNAME_PERMISSION = "java.security.Permission"; private static final String CLASSNAME_BASIC_PERMISSION = "java.security.BasicPermission"; private static final String CLASSNAME_FILE_PERMISSION = "java.io.FilePermission"; private static final String CLASSNAME_SOCKET_PERMISSION = "java.net.SocketPermission"; private static final String CLASSNAME_AWT_PERMISSION = "java.awt.AWTPermission"; private static final String CLASSNAME_NET_PERMISSION = "java.net.NetPermission"; private static final String CLASSNAME_PROPERTY_PERMISSION = "java.util.PropertyPermission"; private static final String CLASSNAME_REFLECT_PERMISSION = "java.lang.reflect.ReflectPermission"; private static final String CLASSNAME_RUNTIME_PERMISSION = "java.lang.RuntimePermission"; private static final String CLASSNAME_SECURITY_PERMISSION = "java.security.SecurityPermission"; private static final String CLASSNAME_SERIALIZABLE_PERMISSION = "java.io.SerializablePermission"; private static final String CLASSNAME_UNRESOLVED_PERMISSION = "java.security.UnresolvedPermission"; private static final String CLASSNAME_ALL_PERMISSION = "java.security.AllPermission"; // for aglets private static final String CLASSNAME_AGLET_PERMISSION = "com.ibm.aglets.security.AgletPermission"; private static final String CLASSNAME_MESSAGE_PERMISSION = "com.ibm.aglets.security.MessagePermission"; private static final String CLASSNAME_CONTEXT_PERMISSION = "com.ibm.aglets.security.ContextPermission"; // - private static final String CLASSNAME_THREAD_PERMISSION = "com.ibm.awb.security.ThreadPermission"; private static final String CLASSNAME_ACTIVITY_PERMISSION = "com.ibm.aglets.security.ActivityPermission"; private static final String CLASSNAME_AGLET_PROTECTION = "com.ibm.aglet.security.AgletProtection"; private static final String CLASSNAME_MESSAGE_PROTECTION = "com.ibm.aglet.security.MessageProtection"; private static final String CLASSNAME_PERMISSION_TMP = "java.security.Permission"; private static final String CLASSNAME_BASIC_PERMISSION_TMP = "java.security.BasicPermission"; private static final String CLASSNAME_FILE_PERMISSION_TMP = "java.io.FilePermission"; private static final String CLASSNAME_SOCKET_PERMISSION_TMP = "java.net.SocketPermission"; private static final String CLASSNAME_AWT_PERMISSION_TMP = "java.awt.AWTPermission"; private static final String CLASSNAME_NET_PERMISSION_TMP = "java.net.NetPermission"; private static final String CLASSNAME_PROPERTY_PERMISSION_TMP = "java.util.PropertyPermission"; private static final String CLASSNAME_REFLECT_PERMISSION_TMP = "java.lang.reflect.ReflectPermission"; private static final String CLASSNAME_RUNTIME_PERMISSION_TMP = "java.lang.RuntimePermission"; private static final String CLASSNAME_SECURITY_PERMISSION_TMP = "java.security.SecurityPermission"; private static final String CLASSNAME_SERIALIZABLE_PERMISSION_TMP = "java.io.SerializablePermission"; private static final String CLASSNAME_UNRESOLVED_PERMISSION_TMP = "java.security.UnresolvedPermission"; private static final String CLASSNAME_ALL_PERMISSION_TMP = "java.security.AllPermission"; private String _originalClassName = null; private String _className = null; private Class _class = null; private String _targetName = null; private String _actions = null; private String _signerNames = null; private static final String QUOTE = String.valueOf(PolicyFileReader.CHAR_STRING_QUOTE); private static final String COMMA = String.valueOf(PolicyFileReader.CHAR_COMMA); private static final String TERMINATOR = String.valueOf(PolicyFileReader.CHAR_TERMINATOR); private static final String NAME_SEPARATOR = COMMA; private static final char CHAR_SLASH = '/'; private static final char CHAR_BACKSLASH = '\\'; private static final char CHAR_ESCAPE = CHAR_BACKSLASH; private static final int NO_TYPE = 0; private static final int TYPE_PERMISSION = 1; private static final int TYPE_PROTECTION = 2; // # private static final int TYPE_ALLOWANCE = 3; private int _type = NO_TYPE; private Vector _signers = null; private Permission _permission = null; private PolicyFileReader _reader = null; public PolicyPermission(PolicyFileReader reader, String type, String className) throws ClassNotFoundException { _reader = reader; setType(type); setClassName(className); } public PolicyPermission(String className) throws ClassNotFoundException { setType(getType(className)); setClassName(className); } protected void checkSigner(String signer) throws SecurityException { // check the permission class is signed by the signer. if (!isSignedBy(signer)) { throw new SecurityException("The permission class '" + _class.getName() + "' is not signed by '" + signer + "'."); } return; } protected void checkSigners(Vector signers) throws SecurityException { // check the permission class is signed by signers. if (signers == null) { // regard as anybody return; } final int num = signers.size(); int i; for (i = 0; i < num; i++) { Object obj = signers.elementAt(i); if (obj instanceof String) { String signer = (String)obj; checkSigner(signer); } } return; } private static String convertClassName(String name) { if (name == null) { return null; } String className = name; if (name.equals(CLASSNAME_PERMISSION)) { className = CLASSNAME_PERMISSION_TMP; } else if (name.equals(CLASSNAME_BASIC_PERMISSION)) { className = CLASSNAME_BASIC_PERMISSION_TMP; } else if (name.equals(CLASSNAME_FILE_PERMISSION)) { className = CLASSNAME_FILE_PERMISSION_TMP; } else if (name.equals(CLASSNAME_SOCKET_PERMISSION)) { className = CLASSNAME_SOCKET_PERMISSION_TMP; } else if (name.equals(CLASSNAME_AWT_PERMISSION)) { className = CLASSNAME_AWT_PERMISSION_TMP; } else if (name.equals(CLASSNAME_NET_PERMISSION)) { className = CLASSNAME_NET_PERMISSION_TMP; } else if (name.equals(CLASSNAME_PROPERTY_PERMISSION)) { className = CLASSNAME_PROPERTY_PERMISSION_TMP; } else if (name.equals(CLASSNAME_REFLECT_PERMISSION)) { className = CLASSNAME_REFLECT_PERMISSION_TMP; } else if (name.equals(CLASSNAME_RUNTIME_PERMISSION)) { className = CLASSNAME_RUNTIME_PERMISSION_TMP; } else if (name.equals(CLASSNAME_SECURITY_PERMISSION)) { className = CLASSNAME_SECURITY_PERMISSION_TMP; } else if (name.equals(CLASSNAME_SERIALIZABLE_PERMISSION)) { className = CLASSNAME_SERIALIZABLE_PERMISSION_TMP; } else if (name.equals(CLASSNAME_UNRESOLVED_PERMISSION)) { className = CLASSNAME_UNRESOLVED_PERMISSION_TMP; } else if (name.equals(CLASSNAME_ALL_PERMISSION)) { className = CLASSNAME_ALL_PERMISSION_TMP; } return className; } public Permission create() throws PolicyFileParsingException, SecurityException { if (_class == null) { throw getParsingException("No permission class."); } int numArgs = 0; if (_targetName != null) { numArgs++; } if (_actions != null) { numArgs++; } Class[] classes = new Class[numArgs]; int i = 0; try { if (_targetName != null) { classes[i] = Class.forName("java.lang.String"); i++; } if (_actions != null) { classes[i] = Class.forName("java.lang.String"); i++; } } catch (ClassNotFoundException excpt) { throw getParsingException(excpt.toString()); } Constructor constructor; try { constructor = _class.getConstructor(classes); } catch (NoSuchMethodException excpt) { throw getParsingException(excpt.toString() + " : " + _class.getName()); } if (constructor == null) { throw getParsingException("No constructor."); } String[] args = new String[numArgs]; i = 0; if (_targetName != null) { args[i] = _targetName; i++; } if (_actions != null) { args[i] = _actions; i++; } Object obj; try { obj = constructor.newInstance(args); } catch (InstantiationException excpt) { throw getParsingException(excpt.toString()); } catch (IllegalAccessException excpt) { throw getParsingException(excpt.toString()); } catch (IllegalArgumentException excpt) { throw getParsingException(excpt.toString()); } catch (InvocationTargetException excpt) { throw getParsingException(excpt.getTargetException().toString()); } if (!(obj instanceof Permission)) { _permission = null; throw getParsingException("Non-permission class cannot be specified."); } if (_type == TYPE_PROTECTION) { if (!(obj instanceof Protection)) { _permission = null; throw getParsingException("Protection class is excepted."); } } _permission = (Permission)obj; log.debug("Created permission: "+_permission); return _permission; } public boolean equals(PolicyPermission permission) { if (permission == null) { return false; } if (!equalsClassName(permission.getClassName())) { return false; } if (!equalsSigners(permission._signers)) { return false; } if (!equalsTargetName(permission.getTargetName())) { return false; } if (!equalsActions(permission.getActions())) { return false; } return true; } public boolean equals(Object obj) { if (obj instanceof PolicyPermission) { PolicyPermission perm = (PolicyPermission)obj; return equals(perm); } return false; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -