在使用applet进行与socket通信的过程中,即使使用数字签名,也不能正常的与socket进行通信.
当与socket进行通信的时,回报出如下错误:
java.security.AccessControlException: access denied (java.net.SocketPermission *.*.*.*:* connect,resolve)
解决办法有两种:
1.修改 找到 %JAVA_HOME%/jre6/lib/security/java.policy 文件,添加如下内容:
//操作Socket端口的各种权限
permission java.net.SocketPermission "10.130.18.60:3000", "listen";
permission java.net.SocketPermission "10.130.18.60:3000", "accept";
permission java.net.SocketPermission "10.130.18.60:3000", "connect";
permission java.net.SocketPermission "10.130.18.60:3000", "listen";
permission java.net.SocketPermission "10.130.18.60:3000", "accept";
permission java.net.SocketPermission "10.130.18.60:3000", "connect";
由于需要修改客户端本地文件,该解决办法不是最优的解决方案,只能算是临时解决问题.
2.使用java.security.AccessController 匿名内部类对socket进行通信方法进行封装.
使用方法如下:
AccessController.doPrivileged(new PrivilegedAction()
{
{
public Object run()
{
{
//what you wanna to do...
return null;
}
});
如果方法需要进行参数传递:
例如:返回String类型
String rkey = (String) AccessController.doPrivileged(new PrivilegedAction()
{
public Object run()
{
String key = "";
{
public Object run()
{
String key = "";
key = your method...
return key;
}
});
}
});
return rkey;
例如:传递Stirng参数到方法中
final String keyTemp = key;
String flag1 = (String) AccessController.doPrivileged(new PrivilegedAction()
{
private String key1 = keyTemp;
public Object run()
{
//what you wanna to do...
String flag1 = (String) AccessController.doPrivileged(new PrivilegedAction()
{
private String key1 = keyTemp;
public Object run()
{
//what you wanna to do...
return null;
}
});