这几天上网查了好多资料如何突破java安全沙箱限制,使用了数字签名仍然不行,万不得以,采用如下方法解决,呵呵:
第一步:编写在本地文件用户目录写java.policy的工具类
package com.northking;
import java.io.File;
import java.io.FileWriter;
/**
* 处理java安全以突破java安全沙箱限制
* <p>Title: </p>
* <p>Description: 影像查询socket客户端</p>
* <p>Copyright: Copyright (c) 2007</p>
* <p>Company: 北京京北方科技股份有限公司</p>
* @author 毛昌明
* @version 1.0
*/
public class JavaPolicyUtil {
public JavaPolicyUtil() {
}
/**
* 检查JAVA 安全是否自动到位
* @return boolean
*/
public static boolean checkJavaPolicy() {
//处理系统安全
String sysDir = System.getProperty("deployment.system.home");
System.out.println("sysDir:" + sysDir);
boolean isSysBoot = checkPolicyDir(sysDir);
String userDir = System.getProperty("deployment.user.home");
System.out.println("userDir:" + userDir);
boolean isUserBoot = checkPolicyDir(userDir);
if (isSysBoot || isUserBoot) {
System.out.println("您的系统作首次初始化操作成功,如果无法正常工作,请关闭浏览器并重新打开重试。");
}
return true; //文件已存在,
}
private static boolean checkPolicyDir(String sDir) {
boolean result = false;
String vers = System.getProperty("java.version");
try {
if (vers.compareTo("1.4") < 0) {
//处理JRE或JDK低于1.4的安全性
String path = System.getProperty("java.home");
String securityFilePath = path + "/" + "lib/security";
System.out.println("securityFilePath:" + securityFilePath);
String policyFile = securityFilePath + "/java.policy";
if (checkFile(policyFile) == 0) { //文件存在
File f = new File(policyFile);
f.delete();
System.out.println("Original Policy file deleted!");
writePolicyFile(policyFile);
}
else {
writePolicyFile(policyFile);
}
}
else { //处理JDK1.4的安全,原有的处理方法。
String policyPath;
String policyFile;
if (sDir != null) {
policyPath = sDir + "/security";
policyFile = policyPath + "/java.policy";
if (checkFile(policyFile) == 0) { //文件存在
return false;
}
else {
createDir(policyPath);
result = writePolicyFile(policyFile);
}
}
return result;
}
}
catch (Exception ex) {
ex.printStackTrace();
}
return result;
}
/**
* control the java application access JVM permittion
* @param policyFile String
* @return boolean
*/
private static boolean writePolicyFile(String policyFile) {
try {
FileWriter fout = new FileWriter(policyFile);
fout.write("grant { \r");
fout.write(" permission java.security.AllPermission; \r");
fout.write(" }; \r");
fout.flush();
fout.close();
System.out.println("policy Write OK:" + policyFile);
return true;
}
catch (Exception ex) {
System.err.println("write policy file is error:" + ex.getMessage());
return false;
}
}
/**
* 创建指定路径的文件夹
* @param _path String
*/
private static void createDir(String _path) {
try {
File f = new File(_path); //create directory each level by level
if (!f.exists()) {
f.mkdirs();
}
System.out.println("Create Direcory:" + _path);
}
catch (Exception ex) {
System.err.println("Create Direcory Error: " + ex.getMessage());
}
}
/**
* 检查一个是否为文件或子目录
* @param filename String
* @return int 0: file, 1:directory,-1:no exits
*/
private static int checkFile(String filename) {
File f = new File(filename);
if (f.isFile()) {
return 0;
}
else if (f.isDirectory()) {
return 1;
}
else {
return -1;
}
}
}
第二步:在applet 的init方法中调用:
public void init(){
System.out.println("socket transfer client version:(" + version + ")");
JavaPolicyUtil.checkJavaPolicy();
}
第三步:进行数字签名,我所用的语句如下:
jar cvf PicTransApplet.jar com/
echo keytool -genkey -alias mykey -keyalg RSA -validity 2000 -keysize 1024 -keypass 123456 -keystore mykey.store -storepass 123456
jarsigner -keystore mykey.store -storepass 123456 -keypass 123456 PicTransApplet.jar mykey
pause
当然这种方法并不是最好的,但是项目实在太紧,就先用它顶着啦,呵呵;听说还有其它方法,就是说在init方法中启动一个线程一直进行业务监听,因为applet对于其内部实现是不受安全沙箱限制的(我的applet是要在页面上通过javascript调用的哟),但是我不是很懂,如果其它朋友有此经验,请分享,谢谢。
分享到:
- 2008-01-29 20:26
- 浏览 4266
- 评论(4)
- 论坛回复 / 浏览 (4 / 6724)
- 查看更多
相关推荐
由于Applet可能来自不可信的网络源,因此Java引入了安全沙箱模型,限制了Applet的权限,如读写本地文件、访问网络资源等。这降低了恶意Applet对用户系统的潜在威胁。 六、JavaApplet的局限性与替代方案 随着Web...
- 由于安全原因,Java Applet运行在沙箱环境中,不能访问本地系统资源,除非用户明确授权。 - 这限制了Applet的功能,但保证了用户的安全。 6. **Java Applet的替代技术** - 随着Web技术的发展,Java Applet逐渐...
- **安全性**:由于Java Applet的运行环境较为受限,它通常被设计得更加安全,以防止恶意代码对用户的计算机造成损害。 - **资源使用**:Java Applet由于其特定的运行环境和限制,通常消耗较少的资源。 - **开发...
- Applet的安全模型:由于运行在用户机器上,Applet受到安全沙箱限制,不能访问本地文件系统或网络资源,除非用户明确授予权限。 - 数字签名:为了突破安全限制,开发者可以对Applet进行数字签名,以增加信任度。 ...
为了缓解这个问题,Java引入了安全沙箱模型,限制了Applet的一些操作,比如读写文件、网络通信等。然而,即使如此,Applet的安全性仍不理想,这也是它逐渐被淘汰的原因之一。 7. **替代技术**: 如今,JavaScript...
总结来说,要超越Java Applet的安全限制,开发者可以为Applet的代码进行数字签名,然后配置Policy文件,赋予Applet特定的权限,如访问本地文件系统或特定网络资源。这种方式使得Applet可以在用户同意的情况下执行更...
Java+Applet实例讲解(分为1和2两部分)、Java+Applet实例编程、java+Applet登录、JavaApplet教程.pdf、JAVA_applet应用实例.ppt、JavaApplet编程技巧实例专辑、javaapplet例子.doc、Applet类.doc等教程。...
鉴于Java Applet的限制和Java平台的发展,JavaFX和Swing成为了开发桌面应用和Web应用的首选,它们提供了更丰富的UI组件和更好的性能,同时不受Applet的安全限制。 总的来说,这个Java Applet应用实例集提供了丰富...
- Applets的安全限制:由于运行在客户端,它们受到安全沙箱的限制,不能访问本地文件系统或网络资源,除非用户明确授权。 2. **Java AWT(Abstract Window Toolkit)**: - AWT是Java图形用户界面(GUI)的基础,...
2. **安全性**:Java Applet运行在Java安全沙箱内,限制了对本地系统资源的访问,以保护用户的系统安全。 3. **网络通信**:Applet可以与服务器进行通信,获取数据或更新自身。 4. **生命周期**:Applet有自己的...
7. **安全性限制**:由于安全原因,Java Applet运行在沙箱环境中,不能访问本地文件系统或网络资源,除非用户明确授予权限。 8. **Java Web Start(JWS)**:随着Java Applet的逐渐淘汰,Java Web Start提供了一种...
Java Applet曾是Web开发的重要组成部分,但由于安全考虑已被逐渐淘汰。然而,学习Java Applet仍然有助于理解客户端程序的运行机制和Web应用的发展历程。通过简单的案例,你可以快速掌握Applet的基本概念和编程模式,...
由于安全原因,Java Applet运行在沙箱环境中,不能访问用户的文件系统或网络,除非用户明确授予了权限。这限制了Applet的某些功能,但也保护了用户的安全。 **5. Applet的使用与局限** 随着Web技术的发展,Java ...
Java Application在权限上较为宽松,可以执行读/写文件等操作,而Java Applet受到沙盒模型的严格限制,禁止对本地文件系统进行读写操作,以保护用户数据安全。这一限制虽然牺牲了一定的功能性,但极大地增强了Web...
8. **安全性限制**:由于Applet是在客户端运行,出于安全考虑,Java沙箱环境会限制Applet的权限,比如不能直接访问本地文件系统。 9. **JRE支持**:Java Applet需要用户的浏览器或系统安装了Java Runtime ...
由于Applet运行在用户的机器上,为了安全考虑,Java沙箱模型对Applet施加了一些限制,比如无法直接访问本地文件系统或网络资源,除非获取了用户的明确许可。 8. **Applet与Java Web Start** 随着Java Web Start的...
**Applet 程序的限制:** 为了安全考虑,大多数浏览器默认禁止了以下操作: 1. **运行时执行其他程序。** 2. **对任何文件进行读写操作。** 3. **调用本地方法。** 4. **尝试连接除提供 Applet 的主机外的其他系统 ...
1. **安全性限制**:由于Applet运行在客户端,出于安全考虑,Java沙箱环境会限制Applet的某些操作,如访问本地文件系统。 2. **浏览器兼容性**:随着现代浏览器逐渐淘汰对JavaApplet的支持,开发者需要考虑替代方案...
Java Security Manager负责实施这些限制,确保applet只能在沙箱环境中运行。 4. **与Web服务器的通信** Java Applet可以通过AppletContext对象与服务器进行通信,例如通过`getDocumentBase()`获取包含applet的HTML...