ǰÑÔ
µ±ÎÒÃÇÔÚÏíÊÜjavaËù´øÀ´µÄ·½±ã¿ì½ÝµÄͬʱ£¬ºÜÉÙÈË»á¹Ø×¢javaÔÚ°²È«·½ÃæËù×öµÄŬÁ¦¡£µ«ÊÂʵÉÏ£¬javaÔÚ°²È«·½ÃæÎªÎÒÃÇ×öÁ˺ܶàµÄÊÂÇé¡£ÕâÀÎÒÃǽ«Îª´ó¼Ò¼òµ¥µÄ½éÉÜjavaµÄ°²È«²ãÒÔ¼°OSGiµÄ°²È«²ã¡£
1 Java°²È«²ãΪÎÒÃÇ×öÁËʲô
´Ó×ÊÔ´¹ÜÀí·½ÃæÀ´¿´£¬javaΪÎÒÃÇÌṩÁËÍêÉÆµÄ×ÊÔ´¹ÜÀí»úÖÆ£¬Ê²Ã´³ÌÐòÓµÓжÔʲô×ÊÔ´µÄʲôȨÏÞ£¬¶¼¿ÉÒÔͨ¹ýÅäÖÃÎļþ½øÐз½±ãµÄÉèÖá£
Æä´Î£¬´Ó´úÂ밲ȫ·½ÃæÀ´¿´£¬Í¨¹ýÖ¤Êé¡¢ÃÜÔ¿µÈ»úÖÆ£¬±£Ö¤ÁË´úÂëÀ´Ô´¿É¿¿£¬²¢ÇÒ±£Ö¤´«²¥Í¾Öв»»á±»ËûÈ˶ñÒâ´Û¸Ä¡£
ÔٴΣ¬´ÓȨÏÞ¹ÜÀí·½ÃæÀ´¿´£¬javaÓÐÒ»Ì׳ÉÊìµÄȨÏÞ¹ÜÀí»úÖÆ£¬Ã¿Î»Óû§¿ÉÒÔ¸ù¾Ý×Ô¼ºµÄÐèÇó¶¨ÖÆ×Ô¼ºËùÐèÒªµÄ°²È«²ßÂÔ¡£
×îºó£¬´ÓÔËÐа²È«·½ÃæÀ´¿´£¬java³ÌÐòµÄÔËÐдÓÀàµÄ¼ÓÔØ¿ªÊ¼£¬¾ÍÔÚ´¦ÓÚjava»úÖÆµÄ±£»¤Ö®Ï£¬ÕâЩ»úÖÆ¿ÉÒÔ±£Ö¤³ÌÐò°²È«ÓÐÐòµÄÔËÐС£
2 °²È«Ä£ÐÍ£º´Ó×î³õ°æµ½½ø½×°æµÄɳºÐÄ£ÐÍ
˵µ½java°²È«Ä£ÐÍ£¬¾Í²»µÃ²»Ìáµ½¾µäµÄɳºÐÄ£ÐÍ¡£ÎÒÃÇÏÈÀ´¿´¿´ÏÂÃæÁ½¸öͼ£º


ͼһËùʾ±ãÊÇ×î³õ°æÉ³ºÐÄ£ÐÍ£¬ÏÔÈ»£¬×î³õ°æÉ³ºÐÄ£ÐÍ»úÖÆÌØ±ð¼òµ¥£¬½«ËùÓдúÂë·ÖΪ±¾µØ´úÂëºÍÔ¶³Ì´úÂ룬±¾µØ´úÂëÓµÓÐËùÓÐȨÏÞ£¬¶øÔ¶³Ì´úÂëÖ»ÓµÓкÜСһ²¿·ÖȨÏÞ£¬Ö»ÄÜÔÚÒ»¸ö¼«ÎªÏÁСµÄÇøÓòÄÚÔËÐУ¬ÓÚÊÇ£¬ÎÒÃǾͽ«Õâ¸öÏÁСµÄÇøÓò³Æ×÷ΪɳºÐ¡£
ÏÔÈ»£¬×î³õ°æÉ³ºÐÄ£ÐÍ´æÔÚ×ÅÐí¶àÎÊÌ⣺±¾µØ´úÂë²»Ò»¶¨¶¼ÊÇ¿ÉÐŵģ¬¿ÉÄܵ¼ÖÂϵͳ²»°²È«£»ÐèҪͨ¹ýÔ¶³Ì´úÂë¿ØÖÆ±¾µØ×ÊÔ´£¬±ÈÈçÔ¶³Ì¹ÜÀíϵͳÎļþµÈµÈ£¬ÎªÁ˽â¾öÕâЩÎÊÌ⣬javaÔÚ×î³õ°æÉ³ºÐÄ£Ð͵Ļù´¡ÉϽøÐÐÁ˸Ľø£¬ÓÚÊDZãÓÐÁËÈçͼ¶þËùʾµÄ½ø½×°æÉ³ºÐÄ£ÐÍ¡£
ÈçͼËùʾ£¬½ø½×°æÉ³ºÐÄ£ÐÍÍêÈ«·ÅÆúÁË¡°¿ÉÐÅÈεĴúÂë¡°ÕâÒ»¸ÅÄ½«ËùÓдúÂëͨ¹ý°²È«²ßÂÔÊÚÓ費ͬµÄȨÏÞ£¬ÒԴ˽øÐа²È«¿ØÖÆ£¬ÕâÑù±ã½â¾öÁ˺ܶà×î³õµÄɳºÐÄ£ÐÍËù²»Äܽâ¾öµÄÎÊÌâ¡£²¢ÇÒ£¬Óë×î³õµÄɳºÐÄ£ÐÍÏà±È£¬½ø½×°æÉ³ºÐÄ£ÐÍ»¹¾ßÓзÃÎÊ¿ØÖƸü¼ÓϸÁ£¶È¡¢°²È«²ßÂÔ¸üÈÝÒ×ÅäÖᢷÃÎÊ¿ØÖƽṹ¸üÈÝÒ×À©Õ¹µÈÓŵ㡣
3 °²È«Ä£ÐÍÏà¹ØµÄÀà
ÉÏÒ»Õ½éÉÜÁ˰²È«Ä£ÐÍ£¬½ÓÏÂÀ´ÎÒÃÇÀ´Ì½¾¿ËüÊÇÈçºÎ¹¤×÷µÄ¡£ÎÒÃÇÏÈÀ´¿´¿´java°²È«Ä£ÐÍËùÉæ¼°µ½µÄÀà¡£

ÈçͼËùʾ£¬µ±java¼ÓÔØÒ»¸öÀàʱ£¬javaΪÿһ¸öÀàÉú³ÉÁËÒ»¸öÏàÓ¦µÄProtectionDomainÀ࣬ͨ¹ý¸ÃÀ࣬javaÄܹ»»ñÈ¡¸ÃÀàµÄ´úÂëÀ´Ô´ÐÅÏ¢£¨URL£©¡¢Ö¤ÊéÐÅÏ¢£¨Certificate£©ÒÔ¼°È¨ÏÞÐÅÏ¢£¨Permissions£©¡£µ±µ÷ÓÃAccessController»òSecurityManagerµÄcheckPermission·½·¨Ê±£¬±ã¿ÉÒÔ»ñ֪ij¸öÀàÊÇ·ñÓиÃȨÏÞ£¬ÒÔ´ïµ½·ÃÎÊ¿ØÖƵÄÄ¿µÄ¡£
4 Êý×ÖÇ©Ãû
JavaÊÇͨ¹ýÉÏͼÖеÄURLÒÔ¼°CertificateÀ´±£Ö¤´úÂëµÄ¿É¿¿ÐԵġ£ÄÇôÎÒÃÇÈçºÎ¸øÎÒÃǵijÌÐò½øÐÐÇ©Ãû£¬¿Í»§¶ËÓÖÐèҪʲôÅäÖÃÀ´Ñé֤ͨ¹ýÓÐÎÒÃÇÇ©ÃûµÄ³ÌÐòÄØ£¿
4.1 Êý×ÖÇ©ÃûÔÀí
ÎÒÃÇÏÈÀ´¿´¿´Êý×ÖÇ©ÃûµÄÔÀí£¬Êý×ÖÇ©ÃûµÄÔÀíºÜ¼òµ¥£¬¶Ôjava³ÌÐò£¨classÎļþ¼°×ÊÔ´£©½øÐÐÉ¢ÁмÆË㣬½«¼ÆËã½á¹ûÓÃ˽Կ¼ÓÃܵõ½Ò»¸öÉ¢ÁÐÖµ£¬½«É¢ÁÐÖµÓëÖ¤ÊéÒ»Æð·Åµ½jar°üÖм´¿É¡£Óû§ÔËÐгÌÐòʱ£¬·¢ÏÖÊý×ÖÖ¤Ê飬ͬÑù¶Ôjava³ÌÐò£¨classÎļþ¼°×ÊÔ´£©½øÐÐÉ¢ÁмÆËãµÃµ½É¢ÁÐÖµD1£¬²¢Óù«Ô¿½«Ç©ÃûºóµÄÉ¢ÁÐÖµ½øÐнâÃܵõ½É¢ÁÐÖµD2£¬½«D1ÓëD2½øÐжԱȣ¬ÈôÒ»Ö£¬Ôòͨ¹ýÇ©ÃûÑéÖ¤£¬·ñÔòʧ°Ü¡£
4.2 ÈçºÎΪ³ÌÐòÇ©Ãû
½ÓÏÂÀ´ÎÒÃÇÀ´½éÉÜÈçºÎÀûÓÃjavaÌṩµÄ¹¤¾ßΪ³ÌÐò½øÐÐÇ©Ãû¡£
Ê×ÏÈ£¬Îª³ÌÐòÇ©ÃûÐèÒªÓµÓа²È«Ö¤Ê飬°²È«Ö¤Êé¿ÉÒÔͨ¹ýÏò°ä·¢ºÍ¹ÜÀíÊý×ÖÖ¤ÊéµÄ¹«Ë¾»ò»ú¹¹½øÐÐÉêÇëÀ´»ñµÃ£¬Ò²¿ÉÒÔ×Ô¼ºÖÆ×÷£¬ÔÚÕâÀÎÒÃÇÀ´Á˽âÈçºÎͨ¹ýjavaÌṩµÄ¹¤¾ßÀ´Éú³É×Ô¼ºµÄ°²È«Ö¤Êé¡£ÎÒÃÇÏÈÀ´¿´¿´ÏÂÃæ¼¸·ù½ØÍ¼£º


ÈçͼËùʾ£¬ÔÚÃüÁîÐÐģʽÏÂÊäÈëkeytool ¨Cgenkey ¨Ckeystore test.keystore
¨Calias person.xr£¬È»ºó°´ÕÕÌáʾÊäÈ룬¼´¿ÉÉú³ÉÃÜÔ¿¿â£¬ÃÜÔ¿¿â´æ´¢ÁËÓëÑéÖ¤ºÍÖ¤Ã÷¸öÈË»òÓ¦ÓõÄÉí·ÝÏà¹ØµÄËùÓÐÖ¤ÊéÐÅÏ¢¡£ÃÜÔ¿¿âÊÇÉú³É°²È«Ö¤ÊéµÄ±Ø±¸Ñ¡ÏȻºó£¬ÔÚÃüÁîÐÐÖÐÊäÈëkeytool
¨Cexport ¨Ckeystore test.keystore ¨Calias person.xr ¨Cfile
test.cer£¬ÊäÈëÃÜÂëºó¼´¿ÉÉú³É×îºóµÄ°²È«Ö¤Ê飬ÃÜÔ¿¿âºÍ°²È«Ö¤ÊéµÄ½ØÍ¼ÈçÏÂͼËùʾ£º

Éú³É°²È«Ö¤Êéºó£¬ÐèÒª¶Ôjava³ÌÐò½øÐмÓÃܲ¢¶ÔÆä½øÐÐÇ©Ãû£¬ÏÂÃæÊǼÓÃܺÍÇ©ÃûµÄÁ½¸ö¼òµ¥Àý×Ó£º
public static void sig(byte[] sigText, String outFileName, String KeyPassword, String KeyStorePath) { char[] kpass; int i; try { KeyStore ks = KeyStore.getInstance("JKS"); FileInputStream ksfis = new FileInputStream(KeyStorePath); BufferedInputStream ksbufin = new BufferedInputStream(ksfis); kpass = new char[KeyPassword.length()]; for (i = 0; i < KeyPassword.length(); i++) kpass[i] = KeyPassword.charAt(i); ks.load(ksbufin, kpass); PrivateKey priv = (PrivateKey) ks.getKey(KeystoreAlias, kpass); Signature rsa = Signature.getInstance("MD5withRSA"); rsa.initSign(priv); rsa.update(sigText); byte[] sig = rsa.sign(); System.out.println("sig is done"); try { FileOutputStream out = new FileOutputStream(outFileName); out.write(sig); out.close(); } catch (IOException e) { e.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); } } |
½«Ç©ÃûÎļþÓëÖ¤Êé¶¼¼ÓÈëµ½jar°üµ±ÖУ¬Ç©Ãû¾ÍÍê³ÉÁË¡£ÕâÀïÖ»ÊÇÒ»¸ö¼òµ¥µÄÀý×Ó£¬Êµ¼ÊÓ¦Óõ±Öиü¼Ó¸´ÔÓ£¬¿ÉÀûÓøü¼Ó·á¸»µÄ¹¤¾ß£¬µ«»ù±¾ÔÀí¶¼ÊÇÒ»Ñù£ºÔÚÃÜÔ¿¿âÖд洢¸÷ÖÖÐÅÏ¢£¬Éú³É°üº¬¹«Ô¿¼°¹«Ë¾ÐÅÏ¢µÄ°²È«Ö¤Ê飬¼ÆËãjava³ÌÐòµÄÉ¢ÁÐÖµ£¬×îºóÓÃ˽Կ¼ÓÃÜ·ÅÈëÇ©ÃûÎļþ£¬Ö¤Ê顢ǩÃûÎļþ¡¢³ÌÐòÈýÕ߾͹¹³ÉÁËÒ»¸öÒÑÇ©Ãû³ÌÐò¡£
ÐèҪעÒâµÄÊÇ£¬Êµ¼ÊÔËÖÐÉÏÖ¤Êé°üº¬µÄ¹«Ô¿ÊǾ¹ý°ä·¢ºÍ¹ÜÀíÊý×ÖÖ¤ÊéµÄ¹«Ë¾»ò»ú¹¹µÄ˽Կ¼ÓÃܵģ¬ËµÃ÷°ä·¢ºÍ¹ÜÀíÊý×ÖÖ¤ÊéµÄ¹«Ë¾»ò»ú¹¹¶Ô¸ÃÖ¤Êé½øÐе£±££¬¸ÃÖ¤ÊéÊÇ¿ÉÐŵġ£
4.3Óû§ÈçºÎÑé֤ǩÃû
µ±Óû§ÊÔͼÔËÐÐÒ»¸öjava³ÌÐòʱ£¬JVM»á°´ÕÕÏÂÁв½Öè½øÐÐÔËÐУº
JVM½âѹJAR°ü£¬·¢ÏÖÀïÃæÓÐÊý×ÖÖ¤Ê飬Ȼºó¸ù¾ÝÖеÄÊý×ÖÖ¤ÊéÐÅÏ¢£¬ÔÚÓû§µÄϵͳÖвéÕÒÊý×ÖÖ¤Êé»ú¹¹µÄ¹«Ô¿£¬Èç¹ûÕÒµ½Ö±½Ó½øÈëµÚÈý²½£¬·ñÔò½øÈëµÚ¶þ²½¡£
JVM¾Í´ÓÊý×ÖÖ¤Êé»ú¹¹ÖÐÌáÈ¡µÄ»ú¹¹¹«Ô¿µØÖ·£¬¸æËßÓû§³ÌÐò/JAR°üÐèÒª»ú¹¹¹«Ô¿²¢Ñ¯ÎÊÓû§ÊÇÔÚÆäµØÖ··ñÏÂÔØËü¡£Èç¹ûÓû§²»ÐÅÈθõØÖ·¶ø²»Í¬Ò⣬ÊÔͼÔËÐгÌÐò/JAR°üʧ°Ü¡£Èç¹ûÓû§Í¬ÒâÏÂÔØ£¬µ«ÊÇÏÂÔØÊ§°ÜµÄ»°£¬ÊÔͼÔËÐгÌÐò/JAR°üҲʧ°Ü¡£Èç¹ûÏÂÔØ³É¹¦¾Í½øÈëÏÂÒ»²½¡£
JVMÓûú¹¹¹«Ô¿¶ÔÊý×ÖÖ¤ÊéÖеĹ«Ô¿½øÐнâÃܼÆËãµÃµ½×îÖյĹ«Ô¿£¬È»ºóÓÃ×îÖյĹ«Ô¿¶ÔÉ¢ÁÐÖµ½øÐнâÃܼÆËãµÃµ½É¢ÁÐÖµ¡£½«¼ÆËãµÃµ½µÄÉ¢ÁÐÖµÓëÇ©ÃûÎļþÖеÄÉ¢ÁÐÖµ½øÐбȽϣ¬ÈôÒ»Ö£¬ÔòÑéÖ¤³É¹¦£¬·ñÔò£¬Ñé֤ʧ°Ü£¬³ÌÐò½«Öжϡ£
5 PermissionÀà
5.1 PermissionÀàµÄ×÷ÓÃ
ÖªµÀÁËÈçºÎͨ¹ýÊý×ÖÇ©Ãû±£Ö¤´úÂëµÄ¿É¿¿ÐÔÖ®ºó£¬ÕâÒ»½ÚÎÒÃǽ«½éÉܰ²È«²ãµÄºËÐÄÀࡪ¡ªPermissionÀà¡£Ç°ÃæÎÒÃÇ˵µ½£¬Ã¿Ò»¸öÀà¶¼°üº¬PermissionsÊôÐÔ£¬Ëü´æ´¢Á˸ÃÀàËùÓеÄPermission£¬ÕâЩPermission±ãÃèÊöÁ˸ÃÀàËùÓÐÓÐȨÏ޵IJÙ×÷¡£ÔÚÔËÐÐʱ£¬Ã¿½øÐÐÒ»¸ö²Ù×÷£¬JVM¶¼»áÅжϸÃÀàÊÇ·ñÓÐÏàÓ¦µÄPermissionÀ´½øÐиòÙ×÷£¬ÈôÓУ¬Ôò¼ÌÐøÔËÐУ¬·ñÔò£¬½«Å׳öjava.security.AccessControlException´íÎó¡£
5.2 javaÄÚÖõÄPermissionÀà
ΪÁË·½±ã´ó¼ÒµÄʹÓã¬javaÄÚ²¿°üº¬ÁËһЩ³£ÓõÄPermissionÀ࣬°üÀ¨Îļþ¶ÁÈ¡¡¢Ê¹ÓÃÍøÂç×ÊÔ´µÈµÈ£¬ÒÔÏÂΪ³£ÓõÄPermissionÀࣺ
java.security.AllPermission java.io.FilePermission java.net.SocketPermission java.security.BasicPermission java.util.PropertyPermission java.lang.RuntimePermission java.awt.AWTPermission java.net.NetPermission java.lang.reflect.ReflectPermission java.io.SerializablePermission java.security.SecurityPermission |
5.3 ×Ô¶¨ÒåPermissionÀà
java.security.PermissionÊÇËùÓÐPermissionÀàµÄ»ùÀ࣬javaÄÚÖõÄÀà¶¼ÊÇËüµÄ×ÓÀ࣬ͬÑù£¬ÈôÊÇÎÒÃÇÏë×Ô¶¨ÒåPermissionÀàµÄ»°£¬ÎÒÃǾÍÐèÒª¼Ì³Ð²¢ÇÒʵÏÖËü¡£ÐèҪעÒâµÄÊÇ£¬¼Ì³ÐµÄ×ÓÀà±ØÐë°üº¬implies·½·¨£¬¸Ã·½·¨½«Ä³¸öPermission×÷Ϊ²ÎÊý£¬ÅÐ¶ÏÆäÊÇ·ñ°üº¬¸ÃPermission¼´Óû§ÊÇ·ñÓµÓиÃPermissionµÄȨÏÞ£¬Èô°üº¬·µ»Øtrue£¬·ñÔò£¬·µ»Øfalse¡£
6 °²È«²ßÂÔ
6.1 ʲôÊǰ²È«²ßÂÔ
ͨ¹ýÒÔÉϽéÉÜ£¬ÎÒÃÇÖªµÀÁËͨ¹ýÇ©ÃûÈ·¶¨Ä³¸öÀàΨһµÄCodeSource£¬ÒÔ±£Ö¤Æä¿É¿¿ÐÔ£¬Í¬Ê±£¬ÎÒÃÇ»¹¿ÉÒÔ×Ô¶¨ÒåPermissionÀ࣬ÒÔÂú×ãÎÒÃDz»Í¬µÄȨÏÞ¹ÜÀíÐèÇó¡£µ«ÊÇ£¬ÎÒÃÇÈçºÎ½«ÄÇЩPermissionÀàÓëÎÒÃǵĴúÂëÏà¶ÔÓ¦£¬»òÕß˵£¬ÎÒÃÇÈçºÎ¶ÔÀà½øÐÐÊÚȨ£¬javaÐéÄâ»úÒÀ¾ÝʲôÀ´È·¶¨Ä³¸öÀàÊÇ·ñÓÐijÖÖȨÏÞÄØ£¿
´ð°¸µ±È»Êǰ²È«²ßÂԵĹÜÀí¡£ÔÚJava\jre6\lib\security Ŀ¼ÏÂÓÐ×ÅÁ½¸öÎļþ£¬java.policy
ÒÔ¼°java.security£¬Õâ¸öÎļþ±ãÊÇjavaÐéÄâ»úĬÈϵݲȫ²ßÂÔÎļþ¡£Í¨¹ýÕâÁ½¸öÎļþ£¬javaÐéÄâ»ú±ãÄÜͨ¹ý´úÂëµÄcodeSoureÐÅÏ¢»ñÈ¡ÆäÏàÓ¦µÄPermission¡£
6.2 java.securityÓëjava.policy
java.securityÊǰ²È«²ßÂÔ¹ÜÀíÖÐ×îΪºËÐĵÄÅäÖÃÎļþ£¬ÆäÖÐÅäÖÃÁËÓëjava°²È«ÓйصIJÎÊý£¬°üÀ¨ÃÜÔ¿¿âµÄµØÖ·¡¢²ßÂÔÎļþµØÖ·µÈ¡£Í¨¹ýÕâЩÅäÖã¬ÎÒÃǾÍÄܽ¨Á¢ÆðÒ»Ì×ÍêÉÆµÄ°²È«¹ÜÀíÌåϵ¡£ÆäλÖÃÊÇ${java.home}/lib/security/java.policy£¬ÓÐÐËȤµÄ¿ÉÒÔ×ÔÐвéÔÄ£¬ÕâÀï¾Í²»Ò»Ò»ÁоÙÁË¡£
½ÓÏÂÀ´ÎÒÃÇÀ´½éÉÜjava.policy£¬ÒÔÏÂΪjava.policyÀïµÄÒ»¶Î´úÂ룺
grant { permission java.util.PropertyPermission "java.version", "read"; permission java.util.PropertyPermission "java.vendor", "read"; permission java.util.PropertyPermission "os.name", "read"; permission java.util.PropertyPermission "os.version", "read"; }; |
ÒÔÉÏ´úÂë±íʾ¶ÔËùÓеĴúÂ븳ÓèÒÔÉϵÄPermission¡£ÄÇô£¬ÎÒÃDZã¿ÉÒÔͨ¹ý¸ÃÅäÖÃÎļþ¸³ÓèÌØ¶¨´úÂëÌØ¶¨È¨ÏÞ£¬ÒÑ´ïµ½·ÃÎÊ¿ØÖƵÄÄ¿µÄ¡£¸ÃÅäÖõÄÓï·¨ÈçÏ£º
grant [SigedBy ¡°signer_name¡±] [, CodeBase ¡°URL¡±] { Permission Permission_class_name [¡°target_name¡±] [, ¡°action¡±] [, SignedBy ¡°signer_names¡±]; Permission ¡¡ }; |
ÆäÖÐ[ ]ÄÚΪ¿ÉÑ¡Ïî¡£
½«java.security Óëjava.policyÅäÖÃÍê³Éºó£¬ÎÒÃDZãÄܹ»±£Ö¤ÎÒÃǵÄjava´úÂëÔÚ°²È«¿É¿¿µÄ»·¾³ÏÂÔËÐÐÁË¡£
µ«ÊÇ£¬¿ÉÄܺܶàÈË»áÓÐÕâÑùµÄÒÉÎÊ£¬µ±ÎÒÃÇÔËÐÐ×Ô¼ºµÄjava³ÌÐòʱ£¬½øÐжÁд»òÆäËûÈκβÙ×÷¶¼ÊÇ¿ÉÒԵ쬲¢Î´´¥·¢°²È«²ßÂÔ¡£Æäʵ£¬ÕâÊÇÒòΪÎÒÃÇÔËÐгÌÐòʱ²¢Î´ÆôÓð²È«²ßÂÔ£¬´Ëʱ£¬°²È«²ßÂÔ²¢²»Æð×÷Óã¬Òò´ËÎÒÃDzÅÄÜÈÎÒâµÄÔËÐÐÕâЩ¡°Î£ÏÕ´úÂ롱¡£ÄÇô£¬ÎªÁ˱£Ö¤¼ÆËã»ú×ÊÔ´µÄ°²È«£¬ÈçºÎÆôÓÃÎÒÃÇËùÅäÖõݲȫ²ßÂÔÎļþÄØ£¿´ð°¸ºÜ¼òµ¥£¬Ö»ÐèÒªÔÚÔËÐÐʱʹÓÃÏÂÁÐÃüÁîjava
-Djava.security.manager [-Djava.security.policy=pURL]
SomeApp£¬ÆäÖУ¬pURLΪָ¶¨²ßÂÔÎļþµØÖ·£¬Îª¿ÉÑ¡ÏĬÈÏΪǰÎĽéÉܵÄjava.policyÎļþ£»SomeAppΪÏëÒªÔËÐеÄjava³ÌÐò¡£ÔÚ¸ÃģʽÏÂÔËÐеÄjava³ÌÐò£¬½«ÑϸñÊܵ½°²È«²ßÂԵĹÜÀí£¬±£Ö¤¼ÆËã»úµÄ°²È«¡£
7 SecurityManagerÓëAccessController
ΪÁ˱£Ö¤´úÂëÔËÐеݲȫ£¬ÎÒÃÇÓÐʱºòÐèÒªÔÚ´úÂëÖÐÈ·ÈÏȨÏÞ£¬´Ëʱ¾ÍÐèÒªSecurityManagerÓëAccessControllerÁË¡£
SecurityManagerÓëAccessControllerÊÇjavaÐéÄâ»ú½øÐзÃÎÊ¿ØÖƵÄÁ½¸öÀ࣬Á½Õß¶¼°üº¬checkPermission·½·¨£¬ÓÃÓÚÑéÖ¤¸ÃÀàÊÇ·ñÓÐȨÏÞ½øÐиòÙ×÷¡£µ±ÎÒÃÇÐèÒª½øÐзÃÎÊʱ£¬Ö»Ðèµ÷ÓÃcheckPermission·½·¨£¬JVM±ã»á¸ù¾ÝÏÖÔڵݲȫ²ßÂÔ¶ÔȨÏÞ½øÐÐÑéÖ¤£¬ÈÃÎÒÃÇÀ´¿´¿´ÏÂÃæÁ½¶Î´úÂ룺
FilePermission perm = new FilePermission(¡°file¡±, ¡°read¡±); AccessController.checkPermission(perm);
SecurityManager security = System.getSecurityManager();
If(security != null){
FilePermission perm = new FilePermission(¡°file¡±,
¡°read¡±);
Security.checkPermission(perm);
} |
ÕâÁ½¸ö´úÂëÆ¬¶ÎµÄ×÷Óö¼ÊÇÑé֤ĿǰÊÇ·ñÓжÔfileÎļþµÄ¶ÁȡȨÏÞ£¬ÈôÓиÃȨÏÞ£¬½«¼ÌÐøÔËÐУ¬·ñÔò£¬½«Å׳ö´íÎó£º

²¢ÇÒ£¬´Ó´úÂëÖÐÎÒÃÇ¿ÉÒÔ¿´³ö£¬AccessController²»ÐèÒª½øÐÐΪ¿ÕÑéÖ¤£¬¶øSecurityManagerÐèÒª¡£ÕâÊÇÒòΪµ±ÅäÖÃÎļþÆôÓÃʱ£¬JVM»á¸ù¾Ý²ßÂÔÎļþ¶ÔAccessController½øÐÐÅäÖò¢Éú³É¶ÔÓ¦µÄSystem.SecurityManager¡£´Ëʱ£¬AccessControllerÓëSecurityManagerµÄÐÐΪÊÇÒ»Öµģ¬Ö»Ðèµ÷ÓÃcheckPermission·½·¨¼´¿É½øÐÐȨÏÞÑéÖ¤¡£¶øµ±²ßÂÔÎļþδÆôÓÃʱ£¬AccessControllerĬÈϸ³Óèÿ¸öÀà¸úĿ¼µÄ¶ÁдȨÏÞÒÔ¼°Í˳öJVMµÄȨÏÞ£¨´ËʱÈô²»Ö÷¶¯µ÷ÓÃcheckPermission·½·¨JVM²»»á½øÐÐȨÏÞÑéÖ¤£©£»²¢ÇÒ£¬JVM²»»áÉú³ÉSystem.SecurityManagerʵÀý£¬´ËʱSystem.SecurityManagerΪ¿Õ¡£
ÐèҪעÒâµÄÊÇ£¬È¨ÏÞÑéÖ¤½«²ÉÈ¡ÈçϲßÂÔ£¬Ê×ÏÈJVM»á¸ù¾ÝÆäµ÷ÓùØÏµÉú³ÉÒ»¸öµ÷ÓÃÁ´£¬°üº¬Éæ¼°¸Ãµ÷ÓõÄËùÓÐÀ࣬Ȼºó£¬AccessController½«»á´Ó×î½üµÄµ÷ÓÃÕß¿ªÊ¼ÑéÖ¤£¬Ò»²ãÒ»²ãÏòÉÏÑéÖ¤£¬ÑéÖ¤¹æÔòÈçÏ£º
ÈôÆäûÓиÃȨÏÞ£¬Å׳ö´íÎó
ÈôÆäÓÐȨÏÞ£¬ÇÒ±ê¼ÇΪprivileged£¬·µ»Ø£¬Ê²Ã´¶¼²»×ö
ÈôÆäÓÐȨÏÞ£¬ÇÒδ±ê¼ÇΪprivileged£¬¼ÌÐøÑØµ÷ÓÃÁ´ÏòÉϽøÐÐÑéÖ¤¡£
´ÓÑéÖ¤¹æÔòÖÐÎÒÃÇ¿ÉÒÔ¿´³ö£¬ÈôÊÇËùÓÐÀ඼δ±»±ê¼ÇΪprivileged£¬ÐèÒªËùÓеÄÀà¶¼¾ßÓиÃȨÏÞ£¬·ñÔòÑéÖ¤½«²»Í¨¹ý¡£ÔÚijЩ³¡¾°Ï£¬Õâ¿ÉÄÜ»áʹµÃÎÒÃǵݲȫ²ßÂÔ±äµÃ¸ü¼Ó¸´ÔÓ¡£Òò´Ë£¬ÎÒÃÇÐèҪͨ¹ý½«Ä³¸öÀà±ê¼ÇΪprivilegedÀ´Ê¹µÃÎÒÃǵݲȫ²ßÂÔ¸ü¼ÓÁé»î¡£ÄÇôÈçºÎ½«Ä³¸öÀà±ê¼ÇΪprivilegedÄØ£¿ÎÒÃÇÀ´¿´¿´ÏÂÃæµÄÀý×Ó£º
Somemethod(){ . . . code . . . String user = (String) AccessController.doPrivileged( new PrivilegedAction(){ public Object run() { return System.getProperty(¡°user.name¡±); } } ); . . . code . . . } |
ÆäÖУ¬run()º¯ÊýÀïµÄ´úÂë±ãÊÇÄÇЩÐèҪȨÏÞ²ÅÄܽøÐеIJÙ×÷¡£
8 Java°²È«²ãС½á
ÏÖÔÚÈÃÎÒÃÇÀ´×ܽáһϣ¬java»á¸øÃ¿¸öclass¶¨ÒåÁ½¸öÊôÐÔ£¬CodeSourceºÍPermissions¡£ÆäÖУ¬CodeSource
¿ÉÒÔͨ¹ý°²È«Ö¤Êé¼°Ç©ÃûÀ´±£Ö¤´úÂëµÄ°²È«ÐԺͿɿ¿ÐÔ£»Í¬Ê±£¬Í¨¹ý²ßÂÔÎļþµÄÅäÖã¬ÎÒÃÇ¿ÉÒÔΪclassÖ¸¶¨Ìض¨µÄPermission£¬ÕâЩPermission¾ÍÊÇÎÒÃǸ³Óè¸ø´úÂëµÄȨÏÞ¡£×îºó£¬ÎÒÃÇ¿ÉÒÔÔÚ´úÂëÖÐͨ¹ýSecurityManagerÓëAccessController¶ÔȨÏÞ½øÐÐÑéÖ¤£¬ÒÔ±£Ö¤´úÂëµÄ°²È«¡£
9 OSGi°²È«²ã
˵ÍêjavaµÄ°²È«²ã£¬ÈÃÎÒÃÇÀ´¿´¿´OSGiµÄ°²È«²ã¡£

OSGi°²È«²ãÊÇOSGi·þÎñ¿ò¼ÜµÄÒ»¸ö¿ÉÑ¡µÄ²ã¡£Ëü»ùÓÚJava 2 °²È«Ìåϵ½á¹¹£¬ÌṩÁ˶ÔÔËÐÐÔÚϸ¿ÅÁ£¶ÈÊܿػ·¾³ÀïÃæµÄÓ¦Óò¿ÊðºÍ¹ÜÀíµÄ»ù´¡¼Ü¹¹¡£
OSGi°²È«²ã¾ßÓÐÏÂÁÐÌØÐÔ£º
ϸ¿ÅÁ£¶È(fine grained)¡ªÔÚOSGi¿ò¼ÜÀï±ßÔËÐеÄÓ¦ÓÿØÖƱØÐ뿼Âǵ½¶ÔÕâЩӦÓõÄÏêϸµÄ¿ØÖÆ
¿É¹ÜÀíÐÔ¡ª°²È«²ã±¾ÉíûÓж¨ÒåAPIÀ´¿ØÖÆÓ¦Ó㬶԰²È«²ãµÄ¹ÜÀí½»ÓÉÉúÃüÖÜÆÚ²ã
¿ÉÑ¡ÐÔ¡ª°²È«²ãÊÇ¿ÉÑ¡µÄ
½ÓÏÂÀ´ÎÒÃǾßÌå¿´¿´OSGi°²È«²ãµÄÌØÊâÖ®´¦¡£
9.1 ´úÂëÑéÖ¤
OSGi °²È«²ãÖ§³Öͨ¹ýλÖúÍÇ©Ãû½øÐдúÂëÑéÖ¤¡£»ùÓÚ´úÂëÑéÖ¤£¬OSGI°²È«²ãÌṩÁËÁ½Ïî·þÎñÀ´¹ÜÀíÓëȨÏÞÏà¹ØµÄ´úÂ룺
ȨÏÞ¹ÜÀí·þÎñ£¨Permission Admin service£©£º»ùÓÚÍêÕûµÄλÖÃ×Ö·û´®µÄȨÏÞ¹ÜÀí
Ìõ¼þȨÏÞ¹ÜÀí·þÎñ£¨Conditional Permission Admin
service£©£º»ùÓÚ×ÛºÏÌõ¼þÄ£ÐÍ µÄȨÏÞ¹ÜÀí£¬¿ÉÒÔʹÓÃλÖûòÇ©ÃûÀ´ÑéÖ¤Ìõ¼þ¡£
ͨ¹ýÉÏÊö·þÎñ£¬¿ÉÒÔÁé»îµÄ¶Ô´úÂë½øÐÐȨÏÞÏà¹ØµÄ²Ù×÷¡£
9.2 Êý×ÖÇ©ÃûJARÎļþ
ÔÚOSGi¿ò¼ÜÖУ¬Í¬ÑùÉæ¼°µ½JARÎļþµÄÊý×ÖÇ©Ãû£¬Í¨¹ýÊý×ÖÇ©Ãû£¬OSGi¿ÉʵÏÖ¶ÔJARµÄÊÚȨ£¬²¢Í¨¹ý¶Ôbundle¼¯ºÏÊÚÓèȨÏÞÀ´²Ù×÷ÆäÖеÄÕâЩbundle¡£
ÐèҪעÒâµÄÊÇ£¬OSGi°²È«¹æ·¶Öй涨£ºOSGiµÄJARÎļþ±ØÐë¶ÔËùÓеÄ×ÊÔ´½øÐÐÇ©Ãû£¬³ýÁËMETA-INFÎļþ¼ÐϵÄ×ÊÔ´¡£Ò²¾ÍÊÇ˵£¬OSGi¹æ·¶Ö»Ö§³ÖÍêÕûÇ©ÃûµÄbundles¡£ÕâÑù×öÊÇÓÉÓÚ²¿·ÖµÄÇ©Ãû»áÆÆ»µ°üµÄ˽ÓÐÐÔ£¬Í¬Ê±ÓÉÓÚÒ»¸öbundleµÄËùÓдúÂ붼ʹÓÃÁËͬÑùµÄ±£»¤Óò£¬Ò²¼ò»¯Á˰²È«APIµÄ´¦Àí¡£
9.3 С½á
ÔÚOSGi°²È«²ãÖУ¬OSGiΪÎÒÃÇÌṩÁËȨÏÞÏà¹ØµÄ·þÎñ£¬·½±ãÁËÎÒÃǶÔÓÚbundle¼¶±ð´úÂëȨÏ޵ĹÜÀí¡£Í¬Ê±£¬OSGi»¹Öƶ¨ÁËbundleµÄÇ©Ãû¹æ·¶£¬Ê¹ÎÒÃǶÔÓÚbundleµÄÇ©Ãû¸ü¼ÓºÏÀí¡£
|