在HTML中部署具有安全权限的Java小程序
我正经历着一段极其艰难的时间来实现这一目标 小程序嵌入在my上,它正在尝试连接到Java Servlet 在某些计算机上,它连接良好,在另一些计算机上,我得到一个无法连接错误,我认为这是由java安全权限引起的 自定义1:拒绝访问(java.net.SocketPermission 184.91.186.5:8080连接,解析) 以下是我将其嵌入html页面的方式:在HTML中部署具有安全权限的Java小程序,java,html,security,applet,embed,Java,Html,Security,Applet,Embed,我正经历着一段极其艰难的时间来实现这一目标 小程序嵌入在my上,它正在尝试连接到Java Servlet 在某些计算机上,它连接良好,在另一些计算机上,我得到一个无法连接错误,我认为这是由java安全权限引起的 自定义1:拒绝访问(java.net.SocketPermission 184.91.186.5:8080连接,解析) 以下是我将其嵌入html页面的方式: <script src="http://java.com/js/deployJava.js"></script&
<script src="http://java.com/js/deployJava.js"></script>
<script>
var attributes = {code:'Calendar_Algorithm.class',
archive:'Cal39.jar',
width:150, height:50,
id:"ClientApp",
name:"ClientApp"
} ;
var parameters = {fontSize:16} ;
var version = '1.6' ;
deployJava.runApplet(attributes, parameters, version);
</script>
var attributes={code:'Calendar\u Algorithm.class',
存档:'Cal39.jar',
宽度:150,高度:50,
id:“ClientApp”,
名称:“ClientApp”
} ;
var参数={fontSize:16};
变量版本='1.6';
runApplet(属性、参数、版本);
我还尝试了一个jnlp文件,但我甚至无法启动jar,以下是我的jnlp文件内容:
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.5+" codebase="" href="">
<security>
<all-permissions/>
</security>
<information>
<title>Easy Course Selector</title>
<vendor>Group Boba</vendor>
<homepage href="index.html"/>
<description>Easy Course Selector</description>
<description kind="short">Easy Course Selector</description>
<icon href="mouseguard-small-jpg3.jpg"/>
</information>
<resources>
<j2se version="1.5+" href="http://java.sun.com/products/autodl/j2se" />
<jar href="Cal.jar" main="true" download="eager" />
</resources>
<applet-desc name="EasyCourse Applet" main-class="Calendar_Algorithm.class" width="200" height="50">
</applet-desc>
<update check="background"/>
</jnlp>
简易课程选择器
波巴族
简易课程选择器
简易课程选择器
以及嵌入代码
<script>
var attributes = {id:"ClientApp", name:"ClientApp", code:'Calendar_Algorithm', width:150, height:50} ;
var parameters = {jnlp_href: 'Cal_Info.jnlp'} ;
deployJava.runApplet(attributes, parameters, '1.6');
</script>
var属性={id:“ClientApp”,名称:“ClientApp”,代码:'Calendar_Algorithm',宽度:150,高度:50};
var参数={jnlp_href:'Cal_Info.jnlp'};
runApplet(属性、参数,“1.6”);
这是我使用它连接到外部服务器时的错误日志:
java.security.AccessControlException: access denied (java.net.SocketPermission 184.91.186.5:8080 connect,resolve)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkConnect(Unknown Source)
at sun.plugin2.applet.Applet2SecurityManager.checkConnect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.<init>(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source)
at Calendar_Algorithm$Con.send_courses_to_server(Calendar_Algorithm.java:789)
at Calendar_Algorithm$Con.run(Calendar_Algorithm.java:773)
at Calendar_Algorithm.send_courses_to_server(Calendar_Algorithm.java:761)
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 sun.plugin.javascript.JSInvoke.invoke(Unknown Source)
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 sun.plugin.javascript.JSClassLoader.invoke(Unknown Source)
at sun.plugin2.liveconnect.JavaClass$MethodInfo.invoke(Unknown Source)
at sun.plugin2.liveconnect.JavaClass$MemberBundle.invoke(Unknown Source)
at sun.plugin2.liveconnect.JavaClass.invoke0(Unknown Source)
at sun.plugin2.liveconnect.JavaClass.invoke(Unknown Source)
at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$DefaultInvocationDelegate.invoke(Unknown Source)
at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo.doObjectOp(Unknown Source)
at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$LiveConnectWorker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
java.security.AccessControlException:拒绝访问(java.net.SocketPermission 184.91.186.5:8080连接,解析)
位于java.security.AccessControlContext.checkPermission(未知源)
位于java.security.AccessController.checkPermission(未知源)
位于java.lang.SecurityManager.checkPermission(未知源)
位于java.lang.SecurityManager.checkConnect(未知源)
位于sun.plugin2.applet.Applet2SecurityManager.checkConnect(未知源)
位于java.net.Socket.connect(未知源)
位于sun.net.NetworkClient.doConnect(未知源)
位于sun.net.www.http.HttpClient.openServer(未知来源)
位于sun.net.www.http.HttpClient.openServer(未知来源)
在sun.net.www.http.HttpClient。(来源不明)
位于sun.net.www.http.HttpClient.New(未知来源)
位于sun.net.www.http.HttpClient.New(未知来源)
位于sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(未知源)
位于sun.net.www.protocol.http.HttpURLConnection.plainConnect(未知源)
位于sun.net.www.protocol.http.HttpURLConnection.connect(未知源)
位于sun.net.www.protocol.http.HttpURLConnection.getOutputStream(未知源)
在Calendar\u Algorithm$Con.将课程发送到服务器(Calendar\u Algorithm.java:789)
在Calendar_算法$Con.run(Calendar_算法.java:773)
在Calendar\u Algorithm.将课程发送到服务器(Calendar\u Algorithm.java:761)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源)
位于java.lang.reflect.Method.invoke(未知源)
位于sun.plugin.javascript.JSInvoke.invoke(未知源)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源)
位于java.lang.reflect.Method.invoke(未知源)
位于sun.plugin.javascript.JSClassLoader.invoke(未知源)
位于sun.plugin2.liveconnect.JavaClass$MethodInfo.invoke(未知源)
位于sun.plugin2.liveconnect.JavaClass$MemberBundle.invoke(未知源)
位于sun.plugin2.liveconnect.JavaClass.invoke0(未知源)
位于sun.plugin2.liveconnect.JavaClass.invoke(未知源)
位于sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$DefaultInvocationDelegate.invoke(未知源)
位于sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$3.run(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo.doObjectOp(未知来源)
位于sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$LiveConnectWorker.run(未知源)
位于java.lang.Thread.run(未知源)
任何帮助都将是惊人的
下面是导致错误的代码:
class Con implements PrivilegedExceptionAction<Boolean> {
private final String text;
boolean res;
public Con(String t) {
text=t;
}
public Boolean run() {
res=send_courses_to_server();
return res;
}
public boolean send_courses_to_server(){
try {
URL url = new URL(server);
HttpURLConnection con;
con=(HttpURLConnection) url.openConnection();
con.setRequestProperty("Content-type", "text/xml; charset=UTF-8");
con.setRequestMethod("POST");
con.setDoOutput(true);
con.setDoInput(true);
OutputStream out = con.getOutputStream();
Writer writer = new OutputStreamWriter(out, "UTF-8");
String xml="";
writer.write("<Request>\n" +"<Request_Type>Validation_2</Request_Type>\n");
xml="<Request>\n" +"<Request_Type>Validation_2</Request_Type>\n";
Scanner in=new Scanner(text);
while(in.hasNext()){
String temp=in.nextLine().trim();
writer.write("<Course>"+temp+"</Course>\n");
xml=xml+"<Course>"+temp+"</Course>\n";
}
writer.write("</Request>\n");
xml=xml+"</Request>\n";
writer.flush();
writer.close();
InputStream is= con.getInputStream();
if(con.getContentType().equals("text/xml")){
status_message= new Scanner(is).nextLine();
return false;
}
else{
return set_courses(is);
}
} catch (Exception e){
e.printStackTrace();
status_message= "Custom 1: "+e.getMessage();
return false;
}
}
private boolean set_courses(InputStream is){
courses=new Vector<Course>();
try {
ObjectInputStream ois=new ObjectInputStream(is);
Course c;
while(true){
try{
c=(Course)ois.readObject();
courses.add(c);
}catch(EOFException e){
break;
}
}
ois.close();
} catch (Exception e){
status_message= "Custom 3 "+e.getMessage();
return false;
}
status_message="Good";
return true;
}
}
class Con实现PrivilegedExceptionAction{
私有最终字符串文本;
布尔res;
公共监狱(t字串){
text=t;
}
公共布尔运行(){
res=将课程发送到服务器();
返回res;
}
公共布尔值将课程发送到服务器(){
试一试{
URL=新URL(服务器);
HttpURLConnection;
con=(HttpURLConnection)url.openConnection();
con.setRequestProperty(“内容类型”,“text/xml;charset=UTF-8”);
con.setRequestMethod(“POST”);
con.设置输出(真);
con.setDoInput(真);
OutputStream out=con.getOutputStream();
Writer Writer=新输出流Writer(out,“UTF-8”);
字符串xml=”“;
write.write(“\n”+”验证\u 2\n”);
xml=“\n”+“验证\u 2\n”;
扫描仪输入=新扫描仪(文本);
while(在.hasNext()中){
字符串温度=in.nextLine().trim();
write.write(“+temp+”\n”);
xml=xml+“”+temp+“\n”;
}
writer.write(“\n”);
xml=xml+“\n”;
writer.flush();
writer.close();
InputStream=con.getInputStream();
if(con.getContentType().equals(“text/xml”)){
状态\消息=新扫描仪(is).nextLine();
返回false;
}
否则{
返回集合课程(is);
}
}捕获(例外e){
e、 printStackTrace();
status_message=“Custom 1:+e.getMessage();
返回false;
}
}
普里瓦特
java.security.AccessControlException: access denied (java.net.SocketPermission 184.91.186.5:8080 connect,resolve)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkConnect(Unknown Source)
at sun.plugin2.applet.Applet2SecurityManager.checkConnect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.<init>(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source)
at Calendar_Algorithm$Con.send_courses_to_server(Calendar_Algorithm.java:789)
at Calendar_Algorithm$Con.run(Calendar_Algorithm.java:773)
at Calendar_Algorithm.send_courses_to_server(Calendar_Algorithm.java:761)
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 sun.plugin.javascript.JSInvoke.invoke(Unknown Source)
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 sun.plugin.javascript.JSClassLoader.invoke(Unknown Source)
at sun.plugin2.liveconnect.JavaClass$MethodInfo.invoke(Unknown Source)
at sun.plugin2.liveconnect.JavaClass$MemberBundle.invoke(Unknown Source)
at sun.plugin2.liveconnect.JavaClass.invoke0(Unknown Source)
at sun.plugin2.liveconnect.JavaClass.invoke(Unknown Source)
at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$DefaultInvocationDelegate.invoke(Unknown Source)
at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo.doObjectOp(Unknown Source)
at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$LiveConnectWorker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
class Con implements PrivilegedExceptionAction<Boolean> {
private final String text;
boolean res;
public Con(String t) {
text=t;
}
public Boolean run() {
res=send_courses_to_server();
return res;
}
public boolean send_courses_to_server(){
try {
URL url = new URL(server);
HttpURLConnection con;
con=(HttpURLConnection) url.openConnection();
con.setRequestProperty("Content-type", "text/xml; charset=UTF-8");
con.setRequestMethod("POST");
con.setDoOutput(true);
con.setDoInput(true);
OutputStream out = con.getOutputStream();
Writer writer = new OutputStreamWriter(out, "UTF-8");
String xml="";
writer.write("<Request>\n" +"<Request_Type>Validation_2</Request_Type>\n");
xml="<Request>\n" +"<Request_Type>Validation_2</Request_Type>\n";
Scanner in=new Scanner(text);
while(in.hasNext()){
String temp=in.nextLine().trim();
writer.write("<Course>"+temp+"</Course>\n");
xml=xml+"<Course>"+temp+"</Course>\n";
}
writer.write("</Request>\n");
xml=xml+"</Request>\n";
writer.flush();
writer.close();
InputStream is= con.getInputStream();
if(con.getContentType().equals("text/xml")){
status_message= new Scanner(is).nextLine();
return false;
}
else{
return set_courses(is);
}
} catch (Exception e){
e.printStackTrace();
status_message= "Custom 1: "+e.getMessage();
return false;
}
}
private boolean set_courses(InputStream is){
courses=new Vector<Course>();
try {
ObjectInputStream ois=new ObjectInputStream(is);
Course c;
while(true){
try{
c=(Course)ois.readObject();
courses.add(c);
}catch(EOFException e){
break;
}
}
ois.close();
} catch (Exception e){
status_message= "Custom 3 "+e.getMessage();
return false;
}
status_message="Good";
return true;
}
}
...
at Calendar_Algorithm$Con.send_courses_to_server(Calendar_Algorithm.java:789)
at Calendar_Algorithm$Con.run(Calendar_Algorithm.java:773)
at Calendar_Algorithm.send_courses_to_server(Calendar_Algorithm.java:761)
...
at sun.plugin.javascript.JSInvoke.invoke(Unknown Source)
...