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

org.zeroturnaround.javarebel.integration.generic.RestrictedClassResourceSource Maven / Gradle / Ivy

The newest version!
package org.zeroturnaround.javarebel.integration.generic;

import java.lang.ref.WeakReference;
import java.net.URL;
import java.security.AccessControlContext;
import java.security.AccessController;
import java.security.PrivilegedAction;
import org.zeroturnaround.javarebel.Resource;
import org.zeroturnaround.javarebel.integration.support.BaseClassResourceSource;
import org.zeroturnaround.javarebel.integration.util.ResourceUtil;

/**
 * Class resource source using privileged actions. 
 * 
 * @author Rein Raudjärv
 * 
 * @see RestrictedResource
 */
public class RestrictedClassResourceSource extends BaseClassResourceSource {

  private final AccessControlContext acc;
  private final WeakReference classloader;
  
  public RestrictedClassResourceSource(ClassLoader classloader) {
    this.classloader = new WeakReference(classloader);
    this.acc = AccessController.getContext();
  }
  
  public Resource getLocalResource(final String name) {
    URL url = (URL) AccessController.doPrivileged(new PrivilegedAction() {
      public Object run() {
        return ResourceUtil.findResource(getClassloader(), name);
      }
    }, acc);
    
    if (url == null)
      return null;
    
    return RestrictedResource.newInstance(acc, ResourceUtil.asResource(url));
  }

  public Resource[] getLocalResources(final String name) {
    URL[] urls = (URL[]) AccessController.doPrivileged(new PrivilegedAction() {
      public Object run() {
        return ResourceUtil.findResources(getClassloader(), name);
      }
    }, acc);
    
    if (urls == null)
      return null;
    
    Resource[] result = new Resource[urls.length];
    for (int i = 0; i < urls.length; i++) {
      URL url = urls[i];
      result[i] = RestrictedResource.newInstance(acc, ResourceUtil.asResource(url));
    }
    return result;
  }
  
  private ClassLoader getClassloader() {
    return (ClassLoader) classloader.get();
  }
  
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy