到未签名Java小程序的原始服务器的套接字连接

到未签名Java小程序的原始服务器的套接字连接,java,security,applet,Java,Security,Applet,我在任何地方都读到,未签名的Java小程序都不允许与任何服务器建立网络连接,但创建小程序的服务器除外。这对于我的应用程序来说是可以的,因为我的小程序只需要与服务器对话。但是,当我编写一个测试小程序尝试打开套接字与开发机器上的进程通信时,它抛出以下异常: Error establishing socket connection: java.security.AccessControlException: access denied (java.net.SocketPermission 127

我在任何地方都读到,未签名的Java小程序都不允许与任何服务器建立网络连接,但创建小程序的服务器除外。这对于我的应用程序来说是可以的,因为我的小程序只需要与服务器对话。但是,当我编写一个测试小程序尝试打开套接字与开发机器上的进程通信时,它抛出以下异常:

Error establishing socket connection: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:11000 connect,resolve)
private void sendMsg(String msg) {
   Socket s = null;
   try {
      s = new Socket("localhost", 11000);
   }
   catch (Exception e) {
      System.err.println("Error establishing socket connection:");
      e.printStackTrace();
      return;
   }

   try {
      OutputStream out = s.getOutputStream();
      out.write(msg.getBytes());
      out.flush();
      s.shutdownOutput();
      s.close();
   }
   catch (Exception e) {
      System.err.println("Error in writing to the socket:");
      e.printStackTrace();
   }
起初,我认为这是我的代码中的一个问题,是我的经验不足导致了我的失误。但是,在尝试运行官方Java教程中的示例时,我遇到了相同的异常。这使我相信我实际上有一个设置问题,或者对默认安全限制有误解。默认安全管理器是否阻止您打开运行小程序的计算机的套接字,即使该计算机也是为小程序服务的计算机?如果是这样,这对我来说是个问题,因为部署的系统将需要允许登录到实际服务器的用户使用远程用户将使用的相同applet。有没有一种方法可以解决我遇到的异常,而不需要对applet进行签名?如果没有必要,我不想惹麻烦

注意:我知道最好不要让用户从服务器访问小程序。这不是最初的设计,但不幸的是,实际考虑迫使我在实现上做出妥协


更新:从Web服务器查看小程序的页面可以解决此问题。即使服务器是本地主机。Java 1.6.0_11中的安全更新仅适用于直接从本地文件系统加载的小程序。

这是由于最近的安全更新中引入的插件发生了更改。很抱歉从本地文件系统加载的小程序不再被授予localhost的套接字权限

Java运行时环境(JRE) 允许从本地加载代码 访问本地主机的文件系统。这 可能允许恶意删除的代码 放在本地文件系统上,然后 然后接着跑,要有网络 对本地主机的访问将不会 否则,如果代码为 从远程主机加载。这可能是 被用来偷饼干和劫持 会话(用于映射名称的域) 到本地主机)


我怀疑您正在从本地HTML文件(例如applet.HTML)运行小程序,这会导致Tom Hawtin提到的错误

而是在您的计算机上运行Web服务器(eg),并通过

从Web服务器中的servlet打开套接字端口可能更好。通过这种方式,您的Web服务器可以管理整个系统,并且可以更简单地在机器之间进行传输


我经常在本地主机和live上的applet和servlet之间使用相同的设置。Oracle知道这个严重限制applet使用的Java问题:Java运行时环境中的安全漏洞可能允许从本地文件系统加载的代码访问本地主机。这是Bug Id 6704154

他们的解决方案是:这个问题没有解决办法;该“解决方案”于2008年12月3日发布。因此,如果您希望将小程序与Tomcat或任何类似的服务器一起使用,您必须回到Java1.4.2


我花了一个多星期的时间完整地记录了这些事实,因为我也在同一条船上。

谢谢你提供的信息。你知道我是否可以使用“crosssite.xml”权限文件来解决这个问题吗?当我有时间时,我会试试看,如果不行,我会接受你的答案。crossdomain.xml?仅适用于URL连接,不适用于套接字级访问。你真的需要一个(小型)网络服务器。你能告诉我你用过什么网络服务器吗?谢谢你的回答!雄猫帮我。