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文件
* @param classPath 要加载的类路径
* @param className 要加载的类名
* 最为限定,只能加载不含包的类.
* */
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 String classPath
* */
public Stri
相关文档:
程序源代码:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JOptionPane; ......
今天小编和大家分享的是Java程序编写规范,希望能对大家有所帮助。
exit()
exit 除了在 main 中可以被调用外,其他的地方不应该调用。因为这样做不给任何代码代码机会来截获退出。一个类似后台服务地程序不应该因为某一个库模块决定了要退出就退出。
异常
申明的错误应该抛出一个RuntimeException或者派生的异常。
......
今天发现一个很NB的玩意,让我们在开发的时候修改Java文件,不用重启服务器立刻生效!支持Jetty tomcat jboss等很多服务器,它就是JRebel。 http://www.zeroturnaround.com/jrebel/installation/ 这里有针对不同服务器的安装方法,基本上主流的都涵盖了,绝大多数程序员都能使用!我们公司用maven/jetty对项目进行构建和开 ......