简体   繁体   English

rmi java.security.AccessControlException

[英]rmi java.security.AccessControlException

I am new to RIM, and currently taking the tutorial at http://java.sun.com/docs/books/tutorial/rmi/overview.html 我是RIM的新手,目前正在http://java.sun.com/docs/books/tutorial/rmi/overview.html上本教程。

I am able to start server like: 我可以像这样启动服务器:

C:\Documents and Settings\myHome>java -cp c:\home\ann\src;c:\home\ann\public_
html\classes\compute.jar -Djava.rmi.server.codebase=file:/c:/home/ann/public_htm
l/classes/compute.jar -Djava.rmi.server.hostname=localhost -Djava.security.polic
y=c:\home\ann\policy\server.policy engine.ComputeEngine
ComputeEngine bound

However, when i try to run client i got exceptions 但是,当我尝试运行客户端时,出现了异常

access: access allowed (java.lang.RuntimePermission createClassLoader)
access: access allowed (java.lang.reflect.ReflectPermission suppressAccessChecks
)
access: access allowed (java.lang.reflect.ReflectPermission suppressAccessChecks
)
access: access allowed (java.lang.reflect.ReflectPermission suppressAccessChecks
)
access: access allowed (java.lang.reflect.ReflectPermission suppressAccessChecks
)
ComputePi exception:
java.rmi.ServerException: RemoteException occurred in server thread; nested exce
ption is:
        java.rmi.UnmarshalException: error unmarshalling arguments; nested excep
tion is:
        java.lang.ClassNotFoundException: access to class loader denied
        at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
        at sun.rmi.transport.Transport$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.Transport.serviceCall(Unknown Source)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Sou
rce)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Sour
ce)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source
)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
        at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknow
n Source)
        at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
        at sun.rmi.server.UnicastRef.invoke(Unknown Source)
        at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(Unkn
own Source)
        at java.rmi.server.RemoteObjectInvocationHandler.invoke(Unknown Source)
        at $Proxy0.executeTask(Unknown Source)
        at client.ComputePi.main(ComputePi.java:27)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested ex
ception is:
        java.lang.ClassNotFoundException: access to class loader denied
        at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
        at sun.rmi.transport.Transport$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.Transport.serviceCall(Unknown Source)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Sou
rce)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Sour
ce)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source
)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: access to class loader denied
        at sun.rmi.server.LoaderHandler.loadClass(Unknown Source)
        at sun.rmi.server.LoaderHandler.loadClass(Unknown Source)
        at java.rmi.server.RMIClassLoader$2.loadClass(Unknown Source)
        at java.rmi.server.RMIClassLoader.loadClass(Unknown Source)
        at sun.rmi.server.MarshalInputStream.resolveClass(Unknown Source)
        at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
        at java.io.ObjectInputStream.readClassDesc(Unknown Source)
        at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.io.ObjectInputStream.readObject(Unknown Source)
        at sun.rmi.server.UnicastRef.unmarshalValue(Unknown Source)
        ... 10 more
Caused by: java.security.AccessControlException: access denied (java.io.FilePerm
ission \c:\home\jones\public_html\classes\- read)
        at java.security.AccessControlContext.checkPermission(Unknown Source)
        at java.security.AccessController.checkPermission(Unknown Source)
        at java.lang.SecurityManager.checkPermission(Unknown Source)
        at sun.rmi.server.LoaderHandler$Loader.checkPermissions(Unknown Source)
        at sun.rmi.server.LoaderHandler$Loader.access$000(Unknown Source)
        ... 21 more

i believe the problem is the client policy file for client (correct if i am wrong please), as we can see from stack trace 我认为问题在于客户端的客户端策略文件(如果我错了,请更正),正如我们从堆栈跟踪中看到的那样

Caused by: java.security.AccessControlException: access denied (java.io.FilePerm
ission \c:\home\jones\public_html\classes\- read)

However, my client.policy file looks like 但是,我的client.policy文件看起来像

grant codeBase "file:/c:/home/jones/public_html/classes/-" {
    permission java.security.AllPermission;
 };
grant{
    permission java.net.SocketPermission "127.0.0.1:1024-65535", "connect,resolve";
};

There are AllPermission for codeBase "file:/c:/home/jones/public_html/classes/-". codeBase有“文件:/ c:/ home / jones / public_html / classes /-”的AllPermission。

So, did i set the codeBase permission wrong, so there are more permission client application needs? 因此,我是否将codeBase权限设置为错误,所以客户端应用程序需要更多权限?

Thanks!!! 谢谢!!!


Update: if i move the client.policy file to C:\\Program Files\\Java\\jre6\\lib\\security and i start the client with 更新:如果我将client.policy文件移动到C:\\ Program Files \\ Java \\ jre6 \\ lib \\ security,然后使用

ComputePi exception:
java.security.AccessControlException: access denied (java.net.SocketPermission 1
27.0.0.1:1099 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 java.net.Socket.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.(Unknown Source)
        at java.net.Socket.(Unknown Source)
        at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown S
ource)
        at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown S
ource)
        at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
        at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
        at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
        at sun.rmi.server.UnicastRef.newCall(Unknown Source)
        at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
        at client.ComputePi.main(ComputePi.java:25)

i got exception 我有例外

grant{
    permission java.net.SocketPermission "127.0.0.1:1024-65535", "connect,resolve";
};

However, the client.policy file has specified 但是,client.policy文件已指定

\ngrant{ 授予{\n    permission java.net.SocketPermission "127.0.0.1:1024-65535", "connect,resolve"; 权限java.net.SocketPermission“ 127.0.0.1:1024-65535”,“ connect,resolve”;\n}; };\n


Update with full stack trace Here is the full stack trace, 使用完整堆栈跟踪进行更新这是完整堆栈跟踪,

access: access denied (java.net.SocketPermission myComputer resolve)
java.lang.Exception: Stack trace
        at java.lang.Thread.dumpStack(Unknown Source)
        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 java.net.InetAddress.getLocalHost(Unknown Source)
        at sun.rmi.transport.tcp.TCPEndpoint.(Unknown Source)
        at java.rmi.registry.LocateRegistry.getRegistry(Unknown Source)
        at java.rmi.registry.LocateRegistry.getRegistry(Unknown Source)
        at java.rmi.registry.LocateRegistry.getRegistry(Unknown Source)
        at client.ComputePi.main(ComputePi.java:24)

At line 80: 在第80行:

\naccess: access allowed (java.net.SocketPermission myComputer resolve) access:允许访问(java.net.SocketPermission myComputer解决)\n

however afrom line 99 to 111 但是从99行到111行

\naccess: access denied (java.net.SocketPermission myComputer resolve) 访问:访问被拒绝(java.net.SocketPermission myComputer解决)\njava.lang.Exception: Stack trace java.lang.Exception:堆栈跟踪\n        at java.lang.Thread.dumpStack(Unknown Source) 在java.lang.Thread.dumpStack(未知来源)\n        at java.security.AccessControlContext.checkPermission(Unknown Source) 在java.security.AccessControlContext.checkPermission(未知源)\n        at java.security.AccessController.checkPermission(Unknown Source) 在java.security.AccessController.checkPermission(未知源)\n        at java.lang.SecurityManager.checkPermission(Unknown Source) 在java.lang.SecurityManager.checkPermission(未知源)\n        at java.lang.SecurityManager.checkConnect(Unknown Source) 在java.lang.SecurityManager.checkConnect(未知来源)\n        at java.net.InetAddress.getLocalHost(Unknown Source) 在java.net.InetAddress.getLocalHost(未知来源)\n        at sun.rmi.transport.tcp.TCPEndpoint.(Unknown Source) 在sun.rmi.transport.tcp.TCPEndpoint处。(未知源)\n        at java.rmi.registry.LocateRegistry.getRegistry(Unknown Source) 在java.rmi.registry.LocateRegistry.getRegistry(未知来源)\n        at java.rmi.registry.LocateRegistry.getRegistry(Unknown Source) 在java.rmi.registry.LocateRegistry.getRegistry(未知来源)\n        at java.rmi.registry.LocateRegistry.getRegistry(Unknown Source) 在java.rmi.registry.LocateRegistry.getRegistry(未知来源)\n        at client.ComputePi.main(ComputePi.java:24) 在client.ComputePi.main(ComputePi.java:24)\n

Problem solved, see my another post 问题已解决,请参阅我的另一篇文章

How do you start the client? 您如何启动客户端? Do you specify a policy file when starting the client? 启动客户端时是否指定策略文件?

Your command line to start the client should look like: 您启动客户端的命令行应如下所示:

java -cp c:\home\jones\src;c:\home\jones\public_html\classes\compute.jar
     -Djava.rmi.server.codebase=file:/c:/home/jones/public_html/classes/
     -Djava.security.policy=client.policy
    client.ComputePi zaphod.east.sun.com 45


Update : you wrote: 更新 :您写道:

if i move the client.policy file to C:\\Program Files\\Java\\jre6\\lib\\security 如果我将client.policy文件移动到C:\\Program Files\\Java\\jre6\\lib\\security

You need to change the paths you see in the examples ( c:\\home\\jones , etc.) to the actual ones you use on your machine (where your code base and security files are). 您需要将示例中看到的路径( c:\\home\\jones等)更改为您在计算机上使用的实际路径(代码库和安全文件所在的位置)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 java.security.AccessControlException:Java RMI电话目录中的访问被拒绝 - java.security.AccessControlException: access denied in Java RMI Telephone Directory Java RMI java.security.AccessControlException:访问被拒绝 - Java RMI java.security.AccessControlException: access denied 运行rmi程序时如何解决java.security.AccessControlException问题? - How do I sort the java.security.AccessControlException issue when running rmi programs? Java applet java.security.AccessControlException - Java applet java.security.AccessControlException Java 8中的新java.security.AccessControlException - New java.security.AccessControlException in Java 8 Java RMI客户端服务器java.security.AccessControlException:访问被拒绝(“ java.util.PropertyPermission”“ java.security.policy”“ write”) - Java RMI Client Server java.security.AccessControlException: access denied (“java.util.PropertyPermission” “java.security.policy” “write”) 错误:java.security.AccessControlException:访问被拒绝 - Error: java.security.AccessControlException: Access denied 如何解决java.security.AccessControlException - How to solve java.security.AccessControlException java.security.AccessControlException:访问被拒绝的异常 - java.security.AccessControlException: access denied Exception Applet与mysql通信中的java.security.AccessControlException - java.security.AccessControlException in applet communicating with mysql
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM