Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Java°²È«²ãÓëOSGi
 
×÷Õß ÕÅÏþÄþ£¬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-10-15
  2879  次浏览      27
 

ǰÑÔ

µ±ÎÒÃÇÔÚÏíÊÜ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µÄÇ©Ãû¸ü¼ÓºÏÀí¡£

   
2879 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

Java ÖеÄÖÐÎıàÂëÎÊÌâ
Java»ù´¡ÖªÊ¶µÄÈýÊ®¸ö¾­µäÎÊ´ð
Íæ×ª Java Web Ó¦Óÿª·¢
ʹÓÃSpring¸üºÃµØ´¦ÀíStruts
ÓÃEclipse¿ª·¢iPhone WebÓ¦ÓÃ
²å¼þϵͳ¿ò¼Ü·ÖÎö


Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ


Struts+Spring+Hibernate/EJB+ÐÔÄÜÓÅ»¯
»ªÏÄ»ù½ð ActiveMQ Ô­ÀíÓë¹ÜÀí
ijÃñº½¹«Ë¾ Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢
ij·çµç¹«Ë¾ Java Ó¦Óÿª·¢Æ½Ì¨ÓëÇ¨ÒÆ
ÈÕÕÕ¸Û J2EEÓ¦Óÿª·¢¼¼Êõ¿ò¼ÜÓëʵ¼ù
ij¿ç¹ú¹«Ë¾ ¹¤×÷Á÷¹ÜÀíJBPM
¶«·½º½¿Õ¹«Ë¾ ¸ß¼¶J2EE¼°ÆäÇ°ÑØ¼¼Êõ