在Java中更改系统属性
我试图学习JINI库,并找到了简单程序的示例。节目安排如下:在Java中更改系统属性,java,securitymanager,Java,Securitymanager,我试图学习JINI库,并找到了简单程序的示例。节目安排如下: package book.basic; import net.jini.core.discovery.LookupLocator; import net.jini.core.lookup.ServiceRegistrar; import java.rmi.RMISecurityManager; import java.rmi.RemoteException; /** * UnicastRegistrar.java */ publ
package book.basic;
import net.jini.core.discovery.LookupLocator;
import net.jini.core.lookup.ServiceRegistrar;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
/**
* UnicastRegistrar.java
*/
public class UnicastRegister {
static public void main(String argv[]) throws RemoteException {
new UnicastRegister();
}
public UnicastRegister() throws RemoteException {
LookupLocator lookup = null;
ServiceRegistrar registrar = null;
System.setSecurityManager(new RMISecurityManager());
try {
lookup = new LookupLocator("jini://localhost");
} catch(java.net.MalformedURLException e) {
System.err.println("Lookup failed: " + e.toString());
System.exit(1);
}
try {
registrar = lookup.getRegistrar();
} catch (java.io.IOException e) {
System.err.println("Registrar search failed: " + e.toString());
System.exit(1);
} catch (java.lang.ClassNotFoundException e) {
System.err.println("Registrar search failed: " + e.toString());
System.exit(1);
}
System.out.println("Registrar found");
// the code takes separate routes from here for client or service
}
} // UnicastRegister
如果运行此应用程序,则引发异常:
线程主java.security.AccessControlException中的异常:
拒绝访问java.net.SocketPermission 127.0.0.1:4160
连接,解析
java.security.AccessControlContext.checkPermissionAccessControlContext.java:372
在
java.security.AccessController.checkPermissionAccessController.java:559
在
java.lang.SecurityManager.checkPermissionSecurityManager.java:549
在java.lang.SecurityManager.checkConnectSecurityManager.java:1051
在java.net.Socket.connectSocket.java:574 at
java.net.Socket.connectSocket.java:528 at
java.net.Socket.Socket.java:425 at
java.net.Socket.Socket.java:241 at
net.jini.core.discovery.LookupLocator.getRegistrLookupLocator.java:328
在
net.jini.core.discovery.LookupLocator.getRegistrLookupLocator.java:286
在book.basic.unicastergister.unicastergister.java:26 at
book.basic.unicastergister.main unicastergister.java:12 at
sun.reflect.NativeMethodAccessorImpl.invoke0Native方法位于
sun.reflect.NativeMethodAccessorImpl.invokeNativeMethodAccessorImpl.java:57
在
sun.reflect.DelegatingMethodAccessorImpl.invokeDelegatingMethodAccessorImpl.java:43
java:606 at
com.intellij.rt.execution.application.AppMain.mainAppMain.java:120
我创建了策略文件policy.all并将其放在主目录中:
此文件包含以下文本:
grant {
permission java.security.AllPermission;
};
接下来,我需要在命令行中将此文件作为参数传递:
-Djava.security.manager-Djava.security.policy=/policy.all,
更像这样-Djava.security.manager-Djava.security.policy=./policy.all
我这样做的初衷是:
我得到下一个编译错误:
如果我尝试直接这样设置策略文件:
System.setProperty("java.security.policy","file:/policy.all");
System.setSecurityManager(new RMISecurityManager());
它不产生任何结果,我再次得到java.security.AccessControlException