All Downloads are FREE. Search and download functionalities are using the official Maven repository.

javax.management.MBeanServerPermission Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (C) The MX4J Contributors.
 * All rights reserved.
 *
 * This software is distributed under the terms of the MX4J License version 1.0.
 * See the terms of the MX4J License in the documentation provided with this software.
 */

package javax.management;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.security.BasicPermission;
import java.security.Permission;
import java.security.PermissionCollection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;

/**
 * The permission that guards access to MBeanServerFactory methods.
 * It has no actions, only target names can be provided.
 * The wildcard "*" means all names, and "createMBeanServer" implies "newMBeanServer", and the names
 * can be specified as a comma separated list.
 * The list of target names is the following:
 * 
    *
  • newMBeanServer
  • *
  • createMBeanServer
  • *
  • findMBeanServer
  • *
  • releaseMBeanServer
  • *
* * @version $Revision: 1.14 $ */ public class MBeanServerPermission extends BasicPermission { private static final long serialVersionUID = 0xb16c9a6bd5fae3d2L; private transient ArrayList targets; private transient boolean wildcard; /** * Creates a new MBeanServerPermission with the specified name and no actions * * @param name The comma separated list of target names */ public MBeanServerPermission(String name) { this(name, null); } /** * Creates a new MBeanServerPermission with the specified name and actions, but the actions will be ignored * * @param name The comma separated list of target names * @param actions Ignored */ public MBeanServerPermission(String name, String actions) { super(name); parseName(name); if (actions != null && actions.length() != 0) throw new IllegalArgumentException("Actions must be null or an empty string"); } /** * Returns null, as this permission does not have actions */ public String getActions() { return null; } public int hashCode() { return targets.hashCode(); } public boolean equals(Object obj) { if (obj == null) return false; if (obj == this) return true; try { MBeanServerPermission other = (MBeanServerPermission)obj; // We don't check wildcard: if targets is empty, means we have a wildcard (see parseName) return targets.equals(other.targets); } catch (ClassCastException x) { } return false; } public boolean implies(Permission p) { if (p == null) return false; if (getClass() != p.getClass()) return false; MBeanServerPermission other = (MBeanServerPermission)p; if (wildcard) return true; if (other.wildcard) return false; if (targets.containsAll(other.targets)) return true; // We have to manage the case where this contains createMBeanServer and other contains newMBeanServer if (other.targets.contains("newMBeanServer") && targets.contains("createMBeanServer")) { // Beware the case where we have MBeanServerPermission "createMBeanServer" and // MBeanServerPermission "newMBeanServer, findMBeanServer": the first should not imply the second. for (int i = 0; i < other.targets.size(); ++i) { Object perm = other.targets.get(i); if ("newMBeanServer".equals(perm)) continue; if (!targets.contains(perm)) return false; } return true; } return false; } private void parseName(String name) { if (name == null) throw new IllegalArgumentException("Permission name cannot be null"); name = name.trim(); if (name.length() == 0) throw new IllegalArgumentException("Permission name cannot be empty"); targets = new ArrayList(); StringTokenizer tokenizer = new StringTokenizer(name, ","); while (tokenizer.hasMoreTokens()) { String target = tokenizer.nextToken().trim(); if (target.length() == 0) continue; if ("*".equals(target)) { targets.clear(); wildcard = true; return; } else if ("newMBeanServer".equals(target) || "createMBeanServer".equals(target) || "findMBeanServer".equals(target) || "releaseMBeanServer".equals(target)) { targets.add(target); } else { throw new IllegalArgumentException("Invalid permission name: " + target); } } if (targets.size() < 1) throw new IllegalArgumentException("Permission name does not contain targets"); // Important to provide same hashcode and equals to permission with names in different order Collections.sort(targets); } public PermissionCollection newPermissionCollection() { return null; } private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { stream.defaultReadObject(); parseName(getName()); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy