securityhandler.java
来自「This is a resource based on j2me embedde」· Java 代码 · 共 572 行 · 第 1/2 页
JAVA
572 行
/* * * * Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). * * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. */package com.sun.midp.security;import javax.microedition.io.*;import javax.microedition.lcdui.*;import com.sun.j2me.security.AccessController;import com.sun.midp.lcdui.*;import com.sun.midp.i18n.Resource;import com.sun.midp.i18n.ResourceConstants;import com.sun.midp.events.EventQueue;import com.sun.midp.io.j2me.storage.*;import com.sun.midp.configurator.Constants;import com.sun.midp.log.Logging;import com.sun.midp.log.LogChannels;/** * Contains methods to handle with the various security state information of a * a MIDlet suite. */public final class SecurityHandler { /** Session level interaction has not occured. */ private final static byte NOT_ASKED = 0; /** User granted permission for this session. */ private final static byte GRANTED = 1; /** User denied permission for this session. */ private final static byte DENIED = -1; /** The security token for this class. */ private static SecurityToken classSecurityToken; /** The standard security exception message. */ public static final String STD_EX_MSG = "Application not authorized " + "to access the restricted API"; /** Permission list. */ private byte permissions[]; /** A flag for the session value of each permission. */ private byte sessionValues[]; /** Maximum permission level list. */ private byte maxPermissionLevels[]; /** True, if trusted. */ private boolean trusted; /** * Creates a security domain with a list of permitted actions or no list * to indicate all actions. The caller must be have permission for * <code>Permissions.MIDP</code> or be the first caller of * the method for this instance of the VM. * * @param apiPermissions for the token * @param domain name of the security domain * * @exception SecurityException if caller is not permitted to call this * method */ public SecurityHandler(byte[] apiPermissions, String domain) { AccessController.checkPermission(Permissions.AMS_PERMISSION_NAME); init(apiPermissions, domain); } /** * Creates a security domain with a list of permitted actions or no list * to indicate all actions. The caller must be have permission for * <code>Permissions.MIDP</code> or be the first caller of * the method for this instance of the VM. * * @param securityToken security token of the caller * @param apiPermissions for the token, can be null * @param domain name of the security domain * * @exception SecurityException if caller is not permitted to call this * method */ public SecurityHandler(SecurityToken securityToken, byte[] apiPermissions, String domain) { securityToken.checkIfPermissionAllowed(Permissions.AMS); init(apiPermissions, domain); } /** * Creates a security domain with a list of permitted actions or no list * to indicate all actions. The caller must be have permission for * <code>Permissions.MIDP</code> or be the first caller of * the method for this instance of the VM. * * @param apiPermissions for the token * @param domain name of the security domain * * @exception SecurityException if caller is not permitted to call this * method */ private void init(byte[] apiPermissions, String domain) { maxPermissionLevels = (Permissions.forDomain(domain))[Permissions.MAX_LEVELS]; permissions = apiPermissions; sessionValues = new byte[permissions.length]; trusted = Permissions.isTrusted(domain); } /** * Get the status of the specified permission. * If no API on the device defines the specific permission * requested then it must be reported as denied. * If the status of the permission is not known because it might * require a user interaction then it should be reported as unknown. * * @param permission to check if denied, allowed, or unknown. * @return 0 if the permission is denied; 1 if the permission is allowed; * -1 if the status is unknown */ public int checkPermission(String permission) { int i; synchronized (this) { try { i = Permissions.getId(permission); } catch (SecurityException e) { return 0; //not found, report denied } switch (permissions[i]) { case Permissions.ALLOW: case Permissions.BLANKET_GRANTED: // report allowed return 1; case Permissions.SESSION: if (sessionValues[i] == GRANTED) { // report allowed return 1; } if (sessionValues[i] == DENIED) { // report denied return 0; } // fall through case Permissions.BLANKET: case Permissions.ONESHOT: // report unknown return -1; default: // Permissions.NEVER break; } // report denied return 0; } } /** * Check for permission and throw an exception if not allowed. * May block to ask the user a question. * <p> * The title, and question strings will be translated, * if a string resource is available. * Since the strings can have substitution token in them, if there is a * "%" it must changed to "%%". If a string has a %1, the app parameter * will be substituted for it. If a string has a "%2, the resource * parameter will be substituted for it. If a string has a %3, the * extraValue parameter will be substituted for it. * * @param permission ID of the permission to check for, * the ID must be from * {@link com.sun.midp.security.Permissions} * @param title Resource constant for the title of the dialog * @param question Resource constant for the question to ask the user * @param oneshotQuestion Resource constant for the oneshot question to * ask the user * @param app name of the application to insert into a string * can be null if no %1 a string * @param resource string to insert into a string, * can be null if no %2 in a string * @param extraValue string to insert into a string, * can be null if no %3 in a string * * @return <code>true</code> if the permission interaction has permanently * changed and the new state should be saved, this will only happen * if the permission granted * * @exception SecurityException if the permission is not * allowed by this token * @exception InterruptedException if another thread interrupts the * calling thread while this method is waiting to preempt the * display. */ public boolean checkForPermission(String permission, String title, String question, String oneshotQuestion, String app, String resource, String extraValue) throws InterruptedException { return checkForPermission(permission, title, question, oneshotQuestion, app, resource, extraValue, STD_EX_MSG); } /** * Check for permission and throw an exception if not allowed. * May block to ask the user a question. * <p> * The title, question, and answer strings will be translated, * if a string resource is available. * Since the strings can have substitution token in them, if there is a * "%" it must changed to "%%". If a string has a %1, the app parameter * will be substituted for it. If a string has a "%2, the resource * parameter will be substituted for it. If a string has a %3, the * extraValue parameter will be substituted for it. * * @param permission ID of the permission to check for, * the ID must be from * {@link com.sun.midp.security.Permissions} * @param title Resource constant for the title of the dialog * @param question Resource constant for the question to ask user * @param oneShotQuestion Resource constant for the oneshot question to * ask the user * @param app name of the application to insert into a string * can be null if no %1 a string * @param resource string to insert into a string, * can be null if no %2 in a string * @param extraValue string to insert into a string, * can be null if no %3 in a string * @param exceptionMsg message if a security exception is thrown * * @return <code>true</code> if the permission interaction has permanently * changed and the new state should be saved, this will only happen * if the permission granted * * @exception SecurityException if the permission is not * allowed by this token * @exception InterruptedException if another thread interrupts the * calling thread while this method is waiting to preempt the * display. */ public boolean checkForPermission(String permissionStr, String title, String question, String oneShotQuestion, String app, String resource, String extraValue, String exceptionMsg) throws InterruptedException { if (permissions == null) { /* totally trusted, all permissions allowed */ return false; } synchronized (this) { int permission;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?