org.voovan.tools.compiler.sandbox.SandboxControler Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of voovan-common Show documentation
Show all versions of voovan-common Show documentation
Voovan is a java framwork and it not depends on any third-party framework.
package org.voovan.tools.compiler.sandbox;
import org.voovan.tools.TObject;
import org.voovan.tools.TProperties;
import java.util.ArrayList;
import java.util.List;
/**
* 沙盒控制对象
*
* @author: helyho
* Voovan Framework.
* WebSite: https://github.com/helyho/Voovan
* Licence: Apache v2 License
*/
public class SandboxControler {
private List forbiddenClasses; //null 全部允许访问, size=0为全部禁止
private List network; //null 全部允许访问, size=0为全部禁止
private List file; //null 全部允许访问, size=0为全部禁止
private List packageAccess; //null 全部允许访问, size=0为全部禁止
private List packageDefintion; //null 全部允许访问, size=0为全部禁止
private boolean thread;
private boolean link;
private boolean properties;
private boolean printJob;
private boolean exec;
private boolean exit;
private boolean factory;
private boolean securityAccess;
private boolean createClassLoader;
public SandboxControler(){
network = null;
file = null;
packageAccess = null;
packageDefintion = null;
thread = true;
link = true;
properties = true;
printJob= true;
exec = true;
exit = true;
securityAccess = true;
createClassLoader = true;
loadConfig();
}
/**
* 从配置文件读取配置信息
*/
public void loadConfig(){
this.forbiddenClasses = setControlField(ControlType.LIST, TProperties.getString("sandbox", "forbiddenClasses"));
this.network = setControlField(ControlType.LIST, TProperties.getString("sandbox", "network"));
this.file = setControlField(ControlType.LIST, TProperties.getString("sandbox", "file"));
this.packageAccess = setControlField(ControlType.LIST, TProperties.getString("sandbox", "packageAccess"));
this.packageDefintion = setControlField(ControlType.LIST, TProperties.getString("sandbox", "packageDefintion"));
this.thread = setControlField(ControlType.BOOLEAN, TProperties.getString("sandbox", "thread"));
this.link = setControlField(ControlType.BOOLEAN, TProperties.getString("sandbox", "link"));
this.properties = setControlField(ControlType.BOOLEAN, TProperties.getString("sandbox", "properties"));
this.printJob = setControlField(ControlType.BOOLEAN, TProperties.getString("sandbox", "printJob"));
this.exec = setControlField(ControlType.BOOLEAN, TProperties.getString("sandbox", "exec"));
this.exit = setControlField(ControlType.BOOLEAN, TProperties.getString("sandbox", "exit"));
this.factory = setControlField(ControlType.BOOLEAN, TProperties.getString("sandbox", "factory"));
this.securityAccess = setControlField(ControlType.BOOLEAN, TProperties.getString("sandbox", "securityAccess"));
this.createClassLoader = setControlField(ControlType.BOOLEAN, TProperties.getString("sandbox", "createClassLoader"));
}
/**
* 配置控制类型美居
*/
public enum ControlType{
LIST, BOOLEAN
}
/**
* 设置控制参数
* @param controlType 控制类型
* @param value 文本数据
* @param 范型
* @return 配置参数值
*/
private T setControlField(ControlType controlType, String value){
Object result = null;
if(value == null){
if(controlType == ControlType.LIST){
result = null;
}else if(controlType == ControlType.BOOLEAN){
result = true;
}
} else if(value.equals("ALL_ALLOW")){
if(controlType == ControlType.LIST){
result = null;
}else if(controlType == ControlType.BOOLEAN){
result = true;
}
} else if(value.equals("ALL_DENY")){
if(controlType == ControlType.LIST){
result = new ArrayList();
}else if(controlType == ControlType.BOOLEAN){
result = false;
}
} else {
if(controlType == ControlType.LIST){
result = TObject.asList(value.split(","));
}
}
return (T)result;
}
public List getForbiddenClasses() {
return forbiddenClasses;
}
public void setForbiddenClasses(List forbiddenClasses) {
this.forbiddenClasses = forbiddenClasses;
}
public List getNetwork() {
return network;
}
public void setNetwork(List network) {
this.network = network;
}
public List getFile() {
return file;
}
public void setFile(List file) {
this.file = file;
}
public boolean isThread() {
return thread;
}
public void setThread(boolean thread) {
this.thread = thread;
}
public boolean isLink() {
return link;
}
public void setLink(boolean link) {
this.link = link;
}
public boolean isProperties() {
return properties;
}
public void setProperties(boolean properties) {
this.properties = properties;
}
public boolean isPrintJob() {
return printJob;
}
public void setPrintJob(boolean printJob) {
this.printJob = printJob;
}
public boolean isExec() {
return exec;
}
public void setExec(boolean exec) {
this.exec = exec;
}
public boolean isExit() {
return exit;
}
public void setExit(boolean exit) {
this.exit = exit;
}
public boolean isFactory() {
return factory;
}
public void setFactory(boolean factory) {
this.factory = factory;
}
public boolean isSecurityAccess() {
return securityAccess;
}
public void setSecurityAccess(boolean securityAccess) {
this.securityAccess = securityAccess;
}
public boolean isCreateClassLoader() {
return createClassLoader;
}
public void setCreateClassLoader(boolean createClassLoader) {
this.createClassLoader = createClassLoader;
}
public List getPackageAccess() {
return packageAccess;
}
public void setPackageAccess(List packageAccess) {
this.packageAccess = packageAccess;
}
public List getPackageDefintion() {
return packageDefintion;
}
public void setPackageDefintion(List packageDefintion) {
this.packageDefintion = packageDefintion;
}
}