servlet域名通讯时与applet的安全问题分析
web应用中的一个jsp页面的applet需要与服务器端的servlet通讯,直接ip,159.226.2.133,访问这一web应用的jsp页面,applet与servlet间的通信没问题。
但我通过域名,如http://www.abc.com来访问这一应用,调用jsp页面时,applet会报如下错误:
access denied (java.net.SocketPermission 159.226.2.133:80 connect,resolve)
java.security.AccessControlException: access denied (java.net.SocketPermission 159.226.2.133:80 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)
也就是说applet与后台servlet连接时是通过ip连接的,而applet现在是出于域名环境下,这样就造成了applet跨域访问,破坏java安全性的情况。
从网上搜索,大家一般都是在客户端jre中做些修改,或进行数字签名,来解决applet跨域访问问题。
大家有什么办法能避免造成applet跨域访问呢,因为实际上applet和web应用都是在一个环境下的,只是由于将这一应用放在了域名下,造成这种问题的
现在getHost()方法是能够获得域名的,但不知道为啥连接时applet总报上面提到的applet安全问题