Java SecurityManager checkConnect()方法与示例
语法:
public void checkConnect(String host_add, int port_no); public void checkConnect(String host_add, int port_no, Object cntxt);
SecurityManager类checkConnect()
方法
checkConnect()方法在java.lang包中可用。
当且仅当port_no不等于-1时,才将checkConnect(Stringhost_add,intport_no)方法称为checkPermission和SocketPermission(host“:”+port_no,“connect”),否则,将调用带有SocketPermission(host_add,“resolve”的checkPermission)仅当port_no等于1。
当且仅当port_no不等于-1并且cntxt参数是AccessControlContext的实例时,checkConnect(Stringhost_add,intport_no,Objectcntxt)方法才用SocketPermission(host“:”+port_no,“connect”)调用checkPermission仅当port_no等于-1并且cntxt参数是AccessControlContext的实例时,才使用SocketPermission(host_add,“resolve”)调用checkPermission。
checkConnect(Stringhost_add,intport_no),checkConnect(Stringhost_add,intport_no,Objectcntxt)方法在检查连接时可能会引发异常。
SecurityException:checkConnect(Stringhost_add,intport_no)-当调用线程无权打开与给定主机和port_no的套接字连接时,可能会抛出此异常。
SecurityException:checkConnect(Stringhost_add,intport_no,Objectcntxt)-当给定的cntxt(上下文)无权打开与给定的主机和port_no的套接字连接时,可能会抛出此异常。
这些方法是非静态方法,只能通过类对象访问,并且,如果尝试使用类名称访问这些方法,则会收到错误消息。
参数:
在第一种情况下,“Stringhost_add,intport_no”
字符串host_add-此参数表示要连接到协议的主机。
intport_no–此参数表示要连接的端口号。
在第二种情况下,“字符串host_add,intport_no,对象cntxt”
字符串host_add–与第一种情况下定义的相似。
intport_no-与第二种情况中定义的类似。
对象cntxt–此参数表示系统特定的安全上下文。
返回值:
此方法的返回类型为void,不返回任何内容。
示例
//Java程序演示示例 //Manager的checkConnect()方法的说明 import java.security.*; public class CheckConnect { public static void main(String[] args) { String host_add = "www.includehelp.com"; int port_no = 8080; AccessControlContext cntxt = AccessController.getContext(); //通过使用setProperty()方法是设置策略属性 //与安全经理 System.setProperty("java.security.policy", "file:/C:/java.policy"); //实例化SecurityManager对象 SecurityManager smgr = new SecurityManager(); //通过使用setSecurityManager()方法是设置 //安全经理 System.setSecurityManager(smgr); // By using checkConnect(host_add,port_no) method is to //检查 //连接是否启用 smgr.checkConnect(host_add, port_no); // By using checkConnect(host_add,port_no,cntxt) method is //检查 //连接是否启用 or when cntxt is an instance of //AccessControlContext- smgr.checkConnect(host_add, port_no, cntxt); //启用连接后显示消息 System.out.println("Accepted.."); } }
输出结果
Exception in thread "main" java.security.AccessControlException: access denied ("java.net.SocketPermission" "www.includehelp.com:8080" "connect,resolve") at java.base/java.security.AccessControlContext.checkPermission(AccessControlContext.java:472) at java.base/java.security.AccessController.checkPermission(AccessController.java:897) at java.base/java.lang.SecurityManager.checkPermission(SecurityManager.java:322) at java.base/java.lang.SecurityManager.checkConnect(SecurityManager.java:824) at CheckConnect.main(CheckConnect.java:26)