Java JAR包中的策略文件
是否有可能从JAR包中读取.policy文件?我发现了这个问题,但这里的链接断开了,我尝试使用下面这样的代码,但它不起作用,我得到了异常(代码下面的异常消息)。我也试过了,结果也一样 java.policyJava JAR包中的策略文件,java,jar,rmi,Java,Jar,Rmi,是否有可能从JAR包中读取.policy文件?我发现了这个问题,但这里的链接断开了,我尝试使用下面这样的代码,但它不起作用,我得到了异常(代码下面的异常消息)。我也试过了,结果也一样 java.policy grant codeBase "file:${{java.ext.dirs}}/*" { permission java.security.AllPermission; }; TelnetServer.java package telnetserver; import java.
grant codeBase "file:${{java.ext.dirs}}/*" {
permission java.security.AllPermission;
};
TelnetServer.java
package telnetserver;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.UnicastRemoteObject;
/**
*
* @author User
*/
public class TelnetServer extends UnicastRemoteObject implements RmiServer{
private static final long serialVersionUID = 1L;
public TelnetServer() throws RemoteException {
super();
}
public static void main(String[] args) {
try {
TelnetServer ts = new TelnetServer();
String plik = ts.getClass().getResource("java.policy").getFile();
System.out.println(plik);
System.setProperty("java.security.policy",plik);
System.setSecurityManager(new java.rmi.RMISecurityManager());
LocateRegistry.createRegistry(1087);
Naming.rebind("//localhost:1087/TelnetServer", new TelnetServer());
System.err.println("Serwer działa!");
} catch (Exception e) {
System.err.println("Złapano wyjątek: " + e.toString());
e.printStackTrace();
}
}
@Override
public String execute(String login, String haslo, String cmd) throws RemoteException {
return "Działa";
}
}
例外情况
运行:
/C:/Users/User/Documents/NetBeansProjects/TelnetServer/build/classes/TelnetServer/java.policy
Złapano wyjątek:java.security.AccessControlException:拒绝访问
(“java.net.SocketPermission”“localhost:1087”“侦听,解析”)
java.security.AccessControlException:拒绝访问
(“java.net.SocketPermission”“localhost:1087”“侦听,解析”)位于
AccessControlContext.checkPermission(AccessControlContext.java:472)
在
java.security.AccessController.checkPermission(AccessController.java:884)
在
checkPermission(SecurityManager.java:549)
位于java.lang.SecurityManager.checkListen(SecurityManager.java:1131)
位于java.net.ServerSocket.bind(ServerSocket.java:374)
ServerSocket.(ServerSocket.java:237)位于
ServerSocket.(ServerSocket.java:128)位于
rmi.transport.proxy.RMIDirectSocketFactory.createServerSocket(RMIDirectSocketFactory.java:45)
在
rmistastersocketfactory.createServerSocket(rmistastersocketfactory.java:345)
在
sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(TCPEndpoint.java:666)
位于sun.rmi.transport.tcp.tcpttransport.listen(tcpttransport.java:330)
在
exportObject(tcpttransport.java:249)
在
exportObject(TCPEndpoint.java:411)
位于sun.rmi.transport.LiveRef.exportObject(LiveRef.java:147)
UnicastServerRef.exportObject(UnicastServerRef.java:234)
位于sun.rmi.registry.RegistryImpl.setup(RegistryImpl.java:195)
registrympl.(registrympl.java:180)位于
java.rmi.registry.LocateRegistry.createRegistry(LocateRegistry.java:203)
位于telnetserver.telnetserver.main(telnetserver.java:32)
你还没有告诉Java它在罐子里。您在调用
getFile()
时删除了所有这些信息。那么,我该怎么办?呃,不要通过调用getFile()
删除所有这些信息?您还没有告诉Java它在JAR中。您在调用getFile()
时删除了所有这些信息。那么,我该怎么办?呃,不要通过调用getFile()
来删除所有这些信息?