java平台沙箱模型_Java沙箱的实现

Java沙箱实现是重写类加载器和安全管理器,通过设置的全局安全管理器来控制执行程序的权限

说明: 安全策略只对安装安全管理器之后的类生效,之前的类不再此管理范围之内,利用这一点可以预先设置我们需要的操作,而对某个点之后的所有非法操作进行权限设置.

类加载器重写

/**

* [重写的类加载器]

* 沙箱程序类加载器,可根据指定路径加载制定类class文件.

*

* [说明]

* 仅包内可见

*

* @author 刘金鑫

* @version 1.0

* */

package org.hljoj.core.judge.sandbox;

import java.io.File;

import java.io.FileInputStream;

import org.hljoj.core.judge.util.ConstantParam;

class SandboxClassLoader extends ClassLoader{

/**默认classPath*/

private String _classPath;

/**

* 构造函数

* @param classPath 类加载器默认classPath

* */

public SandboxClassLoader(String classPath) {

this._classPath = classPath;

}

@Override

protected Class> findClass(String className) throws ClassNotFoundException {

return loadClass(_classPath, className);

}

/**

* 更改类加载器加载类的classpath,在制定路径下加载制定的类class文件

* @paramclassPath要加载的类路径

* @paramclassName 要加载的类名

* 最为限定,只能加载不含包的类.

* */

public Class> loadClass(String classPath, String className) throws ClassNotFoundException{

if(className.indexOf('.') >= 0) {

throw new ClassNotFoundException(className);

}

File classFile = new File(classPath + ConstantParam.SEPARATOR + className + ".class");

byte[] mainClass = new byte[(int) classFile.length()];

try {

FileInputStream in = new FileInputStream(classFile);

in.read(mainClass);

in.close();

} catch (Exception e) {

//e.printStackTrace();

throw new ClassNotFoundException(className);

}

return super.defineClass(className, mainClass, 0, mainClass.length);

}

/**

* 获取classPath

* @return StringclassPath

* */

public Stri

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值