package org.jboss.as.server.deployment.service; import org.jboss.as.server.security.ServerPermission; import org.jboss.msc.service.ServiceController; import org.jboss.msc.service.ServiceName; import org.jboss.msc.service.ServiceNotFoundException; import org.jboss.msc.service.ServiceRegistry; import java.security.Permission; import java.util.List; /** * * TODO: these checks should be part of MSC * @author Stuart Douglas */ public class SecuredServiceRegistry implements ServiceRegistry { /** * A {@link org.jboss.as.server.security.ServerPermission} needed to use {@link org.jboss.as.server.deployment.service.SecuredServiceRegistry}, i.e. invoke its methods. The name of the permission is "{@code useServiceRegistry}." */ public static final Permission PERMISSION = ServerPermission.USE_SERVICE_REGISTRY; private final ServiceRegistry delegate; public SecuredServiceRegistry(ServiceRegistry delegate) { this.delegate = delegate; } @Override public ServiceController<?> getRequiredService(ServiceName serviceName) throws ServiceNotFoundException { checkPermission(PERMISSION); return delegate.getRequiredService(serviceName); } @Override public ServiceController<?> getService(ServiceName serviceName) { checkPermission(PERMISSION); return delegate.getService(serviceName); } @Override public List<ServiceName> getServiceNames() { checkPermission(PERMISSION); return delegate.getServiceNames(); } private static void checkPermission(final Permission permission) { SecurityManager securityManager = System.getSecurityManager(); if (securityManager != null) { securityManager.checkPermission(permission); } } }