
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