对于Java Applet,http:// localhost:8000 /和http://127.0.0.1:8000/之间有什么区别

weixin_38063425 2019-09-12 11:28:37
我有一个与Java Applet安全相关的问题/问题…我使用必须从服务器(ASP.NET)获取文件并从中表示信息的Applet. Applet使用代码获取文件: URL u = new URL(getCodeBase(), filename); BufferedReader d = new BufferedReader(new InputStreamReader(u.openStream())); 此代码出现在两个地方: > Init()方法>从JavaScript手动调用的另一种方法Test() 因此,当我尝试使用URL http://127.0.0.1:8000/Test.aspx加载带有Applet的页面时,一切正常,我可以从这两种方法中读取文件内容.但是,如果我更改http:// localhost:8000 /上的URL,只有第一种方法正常工作,我可以获取文件内容,而第二种方法我在JavaConsole中收到下一条错误消息: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:8000 connect,resolve) 这种情况有什么区别?为什么在这种情况下’localhost’是不可能的?有没有什么方法可以像127.0.0.1一样授予对“localhost”的访问权限? 这是最简单的applet示例: public class TestApplet extends Applet { public void init() { System.out.println( "init..."); readDocument(); } public void readDocument() { System.out.println( "read test.txt file..."); URL base = getCodeBase(); String filename = "test.txt"; try { URL u = new URL(base, filename); BufferedReader d = new BufferedReader(new InputStreamReader(u.openStream())); System.out.println(d.readLine()); System.out.println("Done!"); } catch (Exception e) { e.printStackTrace(); } } } 以及客户端使用的下一个代码: <applet archive="/Content/test.jar" code="test.TestApplet.class" name="testApplet" mayscript></applet> <script language="javascript" type="text/javascript"> $(document).ready(function () { var testApplet = document.testApplet; testApplet.readDocument(); }); </script> 当我尝试使用http://127.0.0.1:8000/Test.aspx时,此代码完美运行当我用户http://localhost:8000/Test.aspx时,它不起作用.我的java控制台我看到下一个: init... read test.txt file... some text... Done! read test.txt file... java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:8000 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.getInputStream(Unknown Source) at java.net.URL.openStream(Unknown Source) at test.TestApplet.readDocument(TestApplet.java:30) 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) P.S.:Applet已签名.
...全文
512 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38063515 2019-09-12
  • 打赏
  • 举报
回复
问题是来自JavaScript的调用.如果您使用JavaScript来调用您的方法,则调用的权限将转到JavaScript桥的权限(即没有任何内容)与您自己的代码的权限的交集 – 即使您自己的代码已签名. 为了避免这种情况,并使用applet代码的完全权限,将安全相关的部分放在AccessController.doPrivileged(…)调用中. (当然,您的applet应该首先检查这不能做任何恶意的事情.) 但是,如果您直接使用IP地址而不是localhost,我不知道它为什么会起作用.
Servlet 第一天 一、简述 1、Servlet,服务器端的小程序,它是相对于Applet 而言的,Applet 是客户端小程序。 Servlet,是接受来自网络的请求(form 表单,以及其他的请求),并对不同请求作出不同的响应 Servlet,是基于Http 协议的,是运行在web 服务器中的程序。这里要提出一个容器的概念。 servlet 是运行在web 容器中,在后面会详细地讲解,这个web 容器可以控制Servlet 对象的生命周期,控制请 求由Servlet 对象处理。 2、web 服务器,这里的服务器不是硬件概念,而是软件,常用的web 服务器有Tomcat,Jboss 等,我们所用到的 Tomcat 是一个开源的服务器, Tomcat 是一个用java 语言编写的web 服务器,所以需要有相应的java 运行环境,也就是JVM,还要配置tomcat 的具体路径。 二、Tomcat 的配置 JAVA_HOME=/XXX/XXX/(JDK 路径,bin 的上一层目录) CATALINA_HOME=/XXXX/XXX(tomcat 的绝对路径windows 中X:\xxx\xxx) 在启动Tomcat 时,是运行Tomcat 的bin 目录下的startup.sh(windows 中使用startup.bat) 判断Tomcat 是否启动成功,可以在浏览器的地址栏中使用http://localhost:8080/或http://127.0.0.1:8080/可以访问到 tomcat 的主页就是启动成功了。 要想停止tomcat 服务器要使用shutdown.sh(windows 中使用shutdown.bat),如果直接关闭启动窗口,就会造成 8080 端口占用错误,这时可以在使用shutdown.sh 关闭一下服务器。 startup.sh,shutdown.sh,shutdown.bat,startup.bat 这些文件其实是一些脚本文件用来执行大量

477

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧