JmxPermissionPrincipal.java
package com.ziesemer.utils.jmx.server.authorization;
import java.security.AccessController;
import java.util.Set;
import javax.management.remote.JMXPrincipal;
import javax.security.auth.Subject;
/**
* <p>Extension to {@link JMXPrincipal} that includes a {@link JmxPermissions}
* collection of {@link JmxPermission}s.
* This allows permissions to be granted during authentication,
* aiding performance by not having to perform additional authentication calculations per-request.</p>
* <p>Designed for use with {@link JmxPermissionAuthorizer}.</p>
* @author Mark A. Ziesemer
* <a href="http://www.ziesemer.com."><www.ziesemer.com></a>
*/
public class JmxPermissionPrincipal extends JMXPrincipal{
private static final long serialVersionUID = 1L;
protected final JmxPermissions permissions = new JmxPermissions();
public JmxPermissionPrincipal(final String name){
super(name);
}
public JmxPermissions getPermissions(){
return permissions;
}
/**
* <p>Convenience method to obtain the current {@link JmxPermissionPrincipal}
* (if it exists) using {@link javax.security.auth.Subject#getSubject(java.security.AccessControlContext)}
* with {@link java.security.AccessController#getContext()}.
* May return <code>null</code>.</p>
*/
public static JmxPermissionPrincipal getCurrent(){
final Subject subject = Subject.getSubject(AccessController.getContext());
if(subject != null){
final Set<JmxPermissionPrincipal> principals = subject.getPrincipals(JmxPermissionPrincipal.class);
if(principals != null && !principals.isEmpty()){
return principals.iterator().next();
}
}
return null;
}
}