我有一个小程序在尝试与服务器(在本地主机上运行)通信时抛出此异常。此问题仅限于 Applet - POJO 客户端能够与完全相同的服务器通信,没有任何问题。
Exception in thread "AWT-EventQueue-1" java.security.AccessControlException: access denied (java.net
.SocketPermission 127.0.0.1:9999 connect,resolve)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
我的 applet.policy 文件的内容是:
grant {
permission java.security.AllPermission;
};
我的问题是我需要修改安全设置的其他地方以授予Applet更多安全设置?
谢谢。
<小时/>编辑:进一步的调查使我发现这个问题只发生在某些机器上 - 而不是其他机器。因此,可能是机器级别(全局)设置导致了这种情况,而不是特定于应用程序的设置(例如 applet.policy 文件中的设置)。
<小时/>编辑:Another SO question: Socket connection to originating server of an unsigned Java applet
这似乎描述了完全相同的问题,并且 Tom Hawtin - tackline 's answer提供了原因(发布了一个安全补丁,禁止小程序连接到localhost
)。考虑到这一点,我如何授予小程序安全设置,以便它确实可以在我的计算机上运行。另外,为什么它在其他机器上按原样运行,但在我的机器上却不行?
最佳答案
看到这个:http://sunsolve.sun.com/search/document.do?assetkey=1-66-246387-1 ,很明显,Applet 从本地主机运行(未部署到 Web 服务器)无法访问本地主机。
如所示,此问题没有解决方法
4. Workaround
There is no workaround for this issue. Please see the Resolution section below.
我的建议如下:
- 对 Jar 文件进行签名以获得更多安全权限 ( http://java.sun.com/docs/books/tutorial/deployment/jar/signindex.html )
规定:
Users who verify your signature can grant your JAR-bundled software security privileges that it wouldn't ordinarily have.
- 从网络服务器(例如 Tomcat)运行您的小程序并通过浏览器在本地访问它。
关于Java:小程序有哪些可用的安全设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2492100/