我写了一个applet:/*******************************************************888/
import java.awt.HeadlessException;
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.security.AccessControlContext;
import javax.swing.JApplet;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;
public class TestApplet extends JApplet {
public TestApplet() {
super();
}
public void destroy() {
}
public String getAppletInfo() {
return "This is my default applet created by Eclipse";
}
public void init() {
}
public void start() {
System.out.println(TestApplet.class.getProtectionDomain());
try{
JFileChooser jarFileChooser = new JFileChooser();
jarFileChooser.setCurrentDirectory(new File("C:\\jar"));
FileFilter ff = new FileFilter() {
public boolean accept(File f) {
if (f.isDirectory() || f.getName().endsWith(".jar")
|| f.getName().endsWith(".zip")) {
return true;
}
return false;
}
public String getDescription() {
return "jar文件或者zip文件, 可以多选";
}
};
jarFileChooser.setFileFilter(ff);
jarFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
jarFileChooser.setMultiSelectionEnabled(true);
int r = jarFileChooser.showOpenDialog(null);
if (r != JFileChooser.APPROVE_OPTION) {
System.exit(0);
}
String className ="com.Start";
String paramStr = "";
String[] params = paramStr == null ? new String[0] : paramStr
.split(" ");
File[] jarFiles = jarFileChooser.getSelectedFiles();
URL[] jarFileUrls = new URL[jarFiles.length];
for (int i = 0; i < jarFileUrls.length; i++) {
jarFileUrls[i] = jarFiles[i].toURL();
}
URLClassLoader classLoader = new URLClassLoader(jarFileUrls,
TestApplet.class.getClassLoader()); // ***
Class mainClass = Class.forName(className, true, classLoader);
System.out.println(mainClass.getProtectionDomain());
Method mainMethod = mainClass.getMethod("main",
new Class[] { String[].class });
mainMethod.invoke(null, new Object[] { params });
}
catch(Exception e )
{
e.printStackTrace();
}
}
public void stop() {
}
}
/*****************************************************************************8/
在这个applet中使用类加载器加了一个jar包b.jar。这个jar包里面只有一个类,代码如下:/***************************************************************************8/
package com;
public class Start{
public static void main(String[] args) {
System.out.println(System.getenv());
}
}
/***************************************************************************8/
然后我把b.jar加上了签名,再把TestApplet打包为a.jar加了签名,并把它加到html中去
<!-------------------------------------------------------------------------->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
<applet codebase="."
code="TestApplet.class"
name="TestApplet"
width="320"
height="240"
archive="a.jar">
</applet>
</body>
</html> <!-------------------------------------------------------------------------->
启动tomcat,键如这个页面的地址,访问到Start的main方法的时候报如下错误:
Java代码
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at TestApplet.start(TestApplet.java:141)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.security.AccessControlException: access denied (java.lang.RuntimePermission getenv.*)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.System.getenv(Unknown Source)
at com.wisii.component.startUp.Start.main(Start.java:338)
... 7 more
而我在
而我在TestAplet中的System.out.println(mainClass.getProtectionDomain());
打印出来的内容是
ProtectionDomain (http://192.168.0.23:8080/wdems2/a.jar <no signer certificates>)
sun.plugin2.applet.Applet2ClassLoader@5d173
<no principals>
java.security.Permissions@1c0ec97 (
(java.lang.RuntimePermission accessClassInPackage.sun.audio)
(java.lang.RuntimePermission stopThread)
(java.util.PropertyPermission java.vm.version read)
(java.util.PropertyPermission java.vendor.url read)
(java.util.PropertyPermission java.vm.name read)
(java.util.PropertyPermission browser.version read)
(java.util.PropertyPermission http.agent read)
(java.util.PropertyPermission java.version read)
(java.util.PropertyPermission browser read)
(java.util.PropertyPermission file.separator read)
(java.util.PropertyPermission javaws.* read,write)
(java.util.PropertyPermission browser.vendor read)
(java.util.PropertyPermission java.specification.vendor read)
(java.util.PropertyPermission line.separator read)
(java.util.PropertyPermission java.vm.specification.version read)
(java.util.PropertyPermission javapi.* read,write)
(java.util.PropertyPermission java.vm.specification.vendor read)
(java.util.PropertyPermission javaplugin.version read)
(java.util.PropertyPermission os.name read)
(java.util.PropertyPermission javaplugin.vm.options read)
(java.util.PropertyPermission java.vm.vendor read)
(java.util.PropertyPermission path.separator read)
(java.util.PropertyPermission java.specification.name read)
(java.util.PropertyPermission os.version read)
(java.util.PropertyPermission os.arch read)
(java.util.PropertyPermission jnlp.* read,write)
(java.util.PropertyPermission java.class.version read)
(java.util.PropertyPermission java.vendor read)
(java.util.PropertyPermission java.vm.specification.name read)
(java.util.PropertyPermission java.specification.version read)
(java.net.SocketPermission 192.168.0.23 connect,accept,resolve)
(java.net.SocketPermission localhost:1024- listen,resolve)
(java.security.AllPermission <all permissions> <all actions>)
)
两个jar包都是加过签名的,所以在applet里面启用的类加载器所执行的程序的权限究竟是什么呢
如果我希望给它定以本地文件的读写权限应该怎么设置?
import java.awt.HeadlessException;
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.security.AccessControlContext;
import javax.swing.JApplet;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;
public class TestApplet extends JApplet {
public TestApplet() {
super();
}
public void destroy() {
}
public String getAppletInfo() {
return "This is my default applet created by Eclipse";
}
public void init() {
}
public void start() {
System.out.println(TestApplet.class.getProtectionDomain());
try{
JFileChooser jarFileChooser = new JFileChooser();
jarFileChooser.setCurrentDirectory(new File("C:\\jar"));
FileFilter ff = new FileFilter() {
public boolean accept(File f) {
if (f.isDirectory() || f.getName().endsWith(".jar")
|| f.getName().endsWith(".zip")) {
return true;
}
return false;
}
public String getDescription() {
return "jar文件或者zip文件, 可以多选";
}
};
jarFileChooser.setFileFilter(ff);
jarFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
jarFileChooser.setMultiSelectionEnabled(true);
int r = jarFileChooser.showOpenDialog(null);
if (r != JFileChooser.APPROVE_OPTION) {
System.exit(0);
}
String className ="com.Start";
String paramStr = "";
String[] params = paramStr == null ? new String[0] : paramStr
.split(" ");
File[] jarFiles = jarFileChooser.getSelectedFiles();
URL[] jarFileUrls = new URL[jarFiles.length];
for (int i = 0; i < jarFileUrls.length; i++) {
jarFileUrls[i] = jarFiles[i].toURL();
}
URLClassLoader classLoader = new URLClassLoader(jarFileUrls,
TestApplet.class.getClassLoader()); // ***
Class mainClass = Class.forName(className, true, classLoader);
System.out.println(mainClass.getProtectionDomain());
Method mainMethod = mainClass.getMethod("main",
new Class[] { String[].class });
mainMethod.invoke(null, new Object[] { params });
}
catch(Exception e )
{
e.printStackTrace();
}
}
public void stop() {
}
}
/*****************************************************************************8/
在这个applet中使用类加载器加了一个jar包b.jar。这个jar包里面只有一个类,代码如下:/***************************************************************************8/
package com;
public class Start{
public static void main(String[] args) {
System.out.println(System.getenv());
}
}
/***************************************************************************8/
然后我把b.jar加上了签名,再把TestApplet打包为a.jar加了签名,并把它加到html中去
<!-------------------------------------------------------------------------->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
<applet codebase="."
code="TestApplet.class"
name="TestApplet"
width="320"
height="240"
archive="a.jar">
</applet>
</body>
</html> <!-------------------------------------------------------------------------->
启动tomcat,键如这个页面的地址,访问到Start的main方法的时候报如下错误:
Java代码
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at TestApplet.start(TestApplet.java:141)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.security.AccessControlException: access denied (java.lang.RuntimePermission getenv.*)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.System.getenv(Unknown Source)
at com.wisii.component.startUp.Start.main(Start.java:338)
... 7 more
而我在
而我在TestAplet中的System.out.println(mainClass.getProtectionDomain());
打印出来的内容是
ProtectionDomain (http://192.168.0.23:8080/wdems2/a.jar <no signer certificates>)
sun.plugin2.applet.Applet2ClassLoader@5d173
<no principals>
java.security.Permissions@1c0ec97 (
(java.lang.RuntimePermission accessClassInPackage.sun.audio)
(java.lang.RuntimePermission stopThread)
(java.util.PropertyPermission java.vm.version read)
(java.util.PropertyPermission java.vendor.url read)
(java.util.PropertyPermission java.vm.name read)
(java.util.PropertyPermission browser.version read)
(java.util.PropertyPermission http.agent read)
(java.util.PropertyPermission java.version read)
(java.util.PropertyPermission browser read)
(java.util.PropertyPermission file.separator read)
(java.util.PropertyPermission javaws.* read,write)
(java.util.PropertyPermission browser.vendor read)
(java.util.PropertyPermission java.specification.vendor read)
(java.util.PropertyPermission line.separator read)
(java.util.PropertyPermission java.vm.specification.version read)
(java.util.PropertyPermission javapi.* read,write)
(java.util.PropertyPermission java.vm.specification.vendor read)
(java.util.PropertyPermission javaplugin.version read)
(java.util.PropertyPermission os.name read)
(java.util.PropertyPermission javaplugin.vm.options read)
(java.util.PropertyPermission java.vm.vendor read)
(java.util.PropertyPermission path.separator read)
(java.util.PropertyPermission java.specification.name read)
(java.util.PropertyPermission os.version read)
(java.util.PropertyPermission os.arch read)
(java.util.PropertyPermission jnlp.* read,write)
(java.util.PropertyPermission java.class.version read)
(java.util.PropertyPermission java.vendor read)
(java.util.PropertyPermission java.vm.specification.name read)
(java.util.PropertyPermission java.specification.version read)
(java.net.SocketPermission 192.168.0.23 connect,accept,resolve)
(java.net.SocketPermission localhost:1024- listen,resolve)
(java.security.AllPermission <all permissions> <all actions>)
)
两个jar包都是加过签名的,所以在applet里面启用的类加载器所执行的程序的权限究竟是什么呢
如果我希望给它定以本地文件的读写权限应该怎么设置?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货