首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RMISecurityManager -负载client.policy

RMISecurityManager -负载client.policy
EN

Stack Overflow用户
提问于 2015-04-24 09:17:04
回答 1查看 1K关注 0票数 0

我想从文件SecurityManager加载client.policy策略。我读到我可以指定-Djava.security.policy=client.policy。但我不想在命令行中指定这一点。我试图在属性文件中指定它。实际上我的代码会抛出异常。如果没有命令行参数,我如何读取策略?

下面是我的代码片段:

代码语言:javascript
复制
prop.load(ClassLoader.getSystemResourceAsStream("config.properties"));
        prop.putAll(System.getProperties());//add Properties from command line

        RMISecurityManager rmi = new RMISecurityManager();
        if (System.getSecurityManager() == null) {
            System.setSecurityManager(rmi);
        }

        //Connect to server by RMIRegistry
        rmiRegistryAddress = prop.getProperty("rmi.registryaddress");
        logger.info("Klient: serwer szukany pod adresem: "+rmiRegistryAddress);
        ISerwer serwer = (ISerwer) Naming.lookup(rmiRegistryAddress + "/" + SERWER_REMOTE_OBJECT_NAME);

config.properties:

代码语言:javascript
复制
    rmi.registryaddress = rmi://192.168.2.3:1099
    #java.rmi.server.codebase=http://...
    java.security.policy=client.policy

client.policy:

代码语言:javascript
复制
grant codeBase "file:src/" {
    permission java.security.AllPermission;
};

和例外情况:

java.security.AccessControlException:拒绝访问("java.net.SocketPermission“"192.168.2.3:1099”连接,java.security.AccessControlContext.checkPermission(AccessControlContext.java:372) at java.security.AccessController.checkPermission(AccessController.java:559) at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) at java.lang.SecurityManager.checkConnect(SecurityManager.java:1051) at java.net.Socket.connect(Socket.java:574) at java.net.Socket.connect(Socket.java:528) at java.net.Socket.(套接字)( sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40) at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:147) at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613) at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216) at sun.rmi.transport.tcp.TCPChannel )sun.rmi.server.UnicastRef.newCall(UnicastRef.java:341) at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source java.rmi.Naming.lookup(Naming.java:101) at sr.warcaby.klient.Klient.run(Klient.java:88) at sr.warcaby.klient.Klient.main(Klient.java:73)

看来client.policy文件似乎没有读取。

第二个问题:如何将所有权限授予本地代码?此路径("file:src/")无效。我想设置相对路径。

编辑:

我做了些改变。现在程序可以工作,但不是我想要的。它允许所有来自远程代码库的代码,但我只想给远程代码一些权限。

更改:

System.setProperties(prop);

grant codeBase "file:/-" { permission java.security.AllPermission; };

java.security.policy=src/main/resources/client.policy java.rmi.server.codebase=http://...somehttpaddress.../warcabycodebase-jar-with-dependencies.jar

EN

回答 1

Stack Overflow用户

发布于 2015-04-24 10:08:42

这里没有实际将.properties文件的内容设置为系统属性的内容。

在安装安全管理器之前,需要设置java.security.policy

而且,您根本不需要安装安全管理器,除非您使用的是RMI代码基特性,并且由服务器提供类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29843441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档