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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ShiroȨÏÞ¹ÜÀí¿ò¼ÜÏê½â
 
×÷ÕߣºÐdz¯
  2287  次浏览      27
2020-5-20 
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª½éÉÜÁËʲôÊÇȨÏÞ¹ÜÀí£¬Óû§Éí·ÝÈÏÖ¤£¬ÊÚȨ£¬È¨ÏÞ¹ÜÀí½â¾ö·½°¸£¬Óû§Éí·ÝÈÏÖ¤À¹½ØÆ÷¼°shiroÈÏÖ¤µÈµÈÏà¹ØÄÚÈÝ¡£
±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼­¡¢ÍƼö¡£

ȨÏÞ¹ÜÀí

1.1 ʲôÊÇȨÏÞ¹ÜÀí

»ù±¾ÉÏÉæ¼°µ½Óû§²ÎÓëµÄϵͳ¶¼Òª½øÐÐȨÏÞ¹ÜÀí£¬È¨ÏÞ¹ÜÀíÊôÓÚϵͳ°²È«µÄ·¶³ë£¬È¨ÏÞ¹ÜÀíʵÏÖ¶ÔÓû§·ÃÎÊϵͳµÄ¿ØÖÆ£¬°´ÕÕ°²È«¹æÔò»òÕß°²È«²ßÂÔ¿ØÖÆÓû§¿ÉÒÔ·ÃÎʶøÇÒÖ»ÄÜ·ÃÎÊ×Ô¼º±»ÊÚȨµÄ×ÊÔ´¡£

ȨÏÞ¹ÜÀí°üÀ¨Óû§Éí·ÝÈÏÖ¤ºÍÊÚȨÁ½²¿·Ö£¬¼ò³ÆÈÏÖ¤ÊÚȨ¡£¶ÔÓÚÐèÒª·ÃÎÊ¿ØÖƵÄ×ÊÔ´Óû§Ê×ÏȾ­¹ýÉí·ÝÈÏÖ¤£¬ÈÏ֤ͨ¹ýºóÓû§¾ßÓиÃ×ÊÔ´µÄ·ÃÎÊȨÏÞ·½¿É·ÃÎÊ¡£

1.2 Óû§Éí·ÝÈÏÖ¤

1.2.1 ¸ÅÄî

Éí·ÝÈÏÖ¤£¬¾ÍÊÇÅжÏÒ»¸öÓû§ÊÇ·ñΪºÏ·¨Óû§µÄ´¦Àí¹ý³Ì¡£×î³£Óõļòµ¥Éí·ÝÈÏÖ¤·½Ê½ÊÇϵͳͨ¹ýºË¶ÔÓû§ÊäÈëµÄÓû§ÃûºÍ¿ÚÁ¿´ÆäÊÇ·ñÓëϵͳÖд洢µÄ¸ÃÓû§µÄÓû§ÃûºÍ¿ÚÁîÒ»Ö£¬À´ÅжÏÓû§Éí·ÝÊÇ·ñÕýÈ·¡£¶ÔÓÚ²ÉÓÃÖ¸ÎÆµÈϵͳ£¬Ôò³öÊ¾Ö¸ÎÆ£»¶ÔÓÚÓ²¼þKeyµÈË¢¿¨ÏµÍ³£¬ÔòÐèҪˢ¿¨¡£

1.2.2 Óû§ÃûÃÜÂëÉí·ÝÈÏÖ¤Á÷³Ì

1.2.3 ¹Ø¼ü¶ÔÏó

ÉϱߵÄÁ÷³ÌͼÖÐÐèÒªÀí½âÒÔϹؼü¶ÔÏó£º

Subject£ºÖ÷Ìå

·ÃÎÊϵͳµÄÓû§£¬Ö÷Ìå¿ÉÒÔÊÇÓû§¡¢³ÌÐòµÈ£¬½øÐÐÈÏÖ¤µÄ¶¼³ÆÎªÖ÷Ì壻

Principal£ºÉí·ÝÐÅÏ¢

ÊÇÖ÷Ì壨subject£©½øÐÐÉí·ÝÈÏÖ¤µÄ±êʶ£¬±êʶ±ØÐë¾ßÓÐΨһÐÔ£¬ÈçÓû§Ãû¡¢ÊÖ»úºÅ¡¢ÓÊÏ䵨ַµÈ£¬Ò»¸öÖ÷Ìå¿ÉÒÔÓжà¸öÉí·Ý£¬µ«ÊDZØÐëÓÐÒ»¸öÖ÷Éí·Ý£¨Primary Principal£©¡£

credential£ºÆ¾Ö¤ÐÅÏ¢

ÊÇÖ»ÓÐÖ÷Ìå×Ô¼ºÖªµÀµÄ°²È«ÐÅÏ¢£¬ÈçÃÜÂë¡¢Ö¤ÊéµÈ¡£

1.3 ÊÚȨ

1.3.1 ¸ÅÄî

ÊÚȨ£¬¼´·ÃÎÊ¿ØÖÆ£¬¿ØÖÆË­ÄÜ·ÃÎÊÄÄЩ×ÊÔ´¡£Ö÷Ìå½øÐÐÉí·ÝÈÏÖ¤ºóÐèÒª·ÖÅäȨÏÞ·½¿É·ÃÎÊϵͳµÄ×ÊÔ´£¬¶ÔÓÚijЩ×ÊԴûÓÐȨÏÞÊÇÎÞ·¨·ÃÎʵġ£

1.3.2 ÊÚȨÁ÷³Ì

ÏÂͼÖгÈɫΪÊÚȨÁ÷³Ì¡£

1.3.3 ¹Ø¼ü¶ÔÏó

ÊÚȨ¿É¼òµ¥Àí½âΪwho¶Ôwhat(which)½øÐÐHow²Ù×÷£º

Who£¬¼´Ö÷Ì壨Subject£©£¬Ö÷ÌåÐèÒª·ÃÎÊϵͳÖеÄ×ÊÔ´¡£

What£¬¼´×ÊÔ´£¨Resource£©£¬Èçϵͳ²Ëµ¥¡¢Ò³Ãæ¡¢°´Å¥¡¢Àà·½·¨¡¢ÏµÍ³ÉÌÆ·ÐÅÏ¢µÈ¡£×ÊÔ´°üÀ¨×ÊÔ´ÀàÐͺÍ×ÊԴʵÀý£¬±ÈÈçÉÌÆ·ÐÅϢΪ×ÊÔ´ÀàÐÍ£¬ÀàÐÍΪt01µÄÉÌÆ·Îª×ÊԴʵÀý£¬±àºÅΪ001µÄÉÌÆ·ÐÅÏ¢Ò²ÊôÓÚ×ÊԴʵÀý¡£

How£¬È¨ÏÞ/Ðí¿É£¨Permission£©£¬¹æ¶¨ÁËÖ÷Ìå¶Ô×ÊÔ´µÄ²Ù×÷Ðí¿É£¬È¨ÏÞÀ뿪×ÊԴûÓÐÒâÒ壬ÈçÓû§²éѯȨÏÞ¡¢Óû§Ìí¼ÓȨÏÞ¡¢Ä³¸öÀà·½·¨µÄµ÷ÓÃȨÏÞ¡¢±àºÅΪ001Óû§µÄÐÞ¸ÄȨÏ޵ȣ¬Í¨¹ýȨÏÞ¿ÉÖªÖ÷Ìå¶ÔÄÄЩ×ÊÔ´¶¼ÓÐÄÄЩ²Ù×÷Ðí¿É¡£

ȨÏÞ·ÖΪ´Ö¿ÅÁ£ºÍϸ¿ÅÁ££¬´Ö¿ÅÁ£È¨ÏÞÊÇÖ¸¶Ô×ÊÔ´ÀàÐ͵ÄȨÏÞ£¬Ï¸¿ÅÁ£È¨ÏÞÊǶÔ×ÊԴʵÀýµÄȨÏÞ¡£

Ö÷Ìå¡¢×ÊÔ´¡¢È¨ÏÞ¹ØÏµÈçÏÂͼ£º

1.3.4 ȨÏÞÄ£ÐÍ

¶ÔÉϽÚÖеÄÖ÷Ìå¡¢×ÊÔ´¡¢È¨ÏÞͨ¹ýÊý¾ÝÄ£Ðͱíʾ¡£

Ö÷Ì壨Õ˺š¢ÃÜÂ룩

×ÊÔ´£¨×ÊÔ´Ãû³Æ¡¢·ÃÎʵØÖ·£©

ȨÏÞ£¨È¨ÏÞÃû³Æ¡¢×ÊÔ´id£©

½ÇÉ«£¨½ÇÉ«Ãû³Æ£©

½ÇÉ«ºÍȨÏÞ¹ØÏµ£¨½ÇÉ«id¡¢È¨ÏÞid£©

Ö÷ÌåºÍ½ÇÉ«¹ØÏµ£¨Ö÷Ìåid¡¢½ÇÉ«id£©

ÈçÏÂͼ£º

ͨ³£ÆóÒµ¿ª·¢Öн«×ÊÔ´ºÍȨÏÞ±íºÏ²¢ÎªÒ»ÕÅȨÏÞ±í£¬ÈçÏ£º

×ÊÔ´£¨×ÊÔ´Ãû³Æ¡¢·ÃÎʵØÖ·£©

ȨÏÞ£¨È¨ÏÞÃû³Æ¡¢×ÊÔ´id£©

ºÏ²¢Îª£º

ȨÏÞ£¨È¨ÏÞÃû³Æ¡¢×ÊÔ´Ãû³Æ¡¢×ÊÔ´·ÃÎʵØÖ·£©

ÉÏͼ³£±»³ÆÎªÈ¨ÏÞ¹ÜÀíµÄͨÓÃÄ£ÐÍ£¬²»¹ýÆóÒµÔÚ¿ª·¢Öиù¾Ýϵͳ×ÔÉíµÄÌØµã»¹»á¶ÔÉÏͼ½øÐÐÐ޸쬵«ÊÇÓû§¡¢½ÇÉ«¡¢È¨ÏÞ¡¢Óû§½ÇÉ«¹ØÏµ¡¢½ÇɫȨÏÞ¹ØÏµÊÇÐèҪȥÀí½âµÄ¡£

1.3.5 ȨÏÞ·ÖÅä

¶ÔÖ÷Ìå·ÖÅäȨÏÞ£¬Ö÷ÌåÖ»ÔÊÐíÔÚȨÏÞ·¶Î§ÄÚ¶Ô×ÊÔ´½øÐвÙ×÷£¬±ÈÈ磺¶Ôu01Óû§·ÖÅäÉÌÆ·ÐÞ¸ÄȨÏÞ£¬u01Óû§Ö»ÄܶÔÉÌÆ·½øÐÐÐ޸ġ£

ȨÏÞ·ÖÅäµÄÊý¾Ýͨ³£ÐèÒª³Ö¾Ã»¯£¬¸ù¾ÝÉϱߵÄÊý¾ÝÄ£ÐÍ´´½¨±í²¢½«Óû§µÄȨÏÞÐÅÏ¢´æ´¢ÔÚÊý¾Ý¿âÖС£

1.3.6 ȨÏÞ¿ØÖÆ

Óû§ÓµÓÐÁËȨÏÞ¼´¿É²Ù×÷ȨÏÞ·¶Î§ÄÚµÄ×ÊÔ´£¬ÏµÍ³²»ÖªµÀÖ÷ÌåÊÇ·ñ¾ßÓзÃÎÊȨÏÞÐèÒª¶ÔÓû§µÄ·ÃÎʽøÐпØÖÆ¡£

1.3.6.1 »ùÓÚ½ÇÉ«µÄ·ÃÎÊ¿ØÖÆ

RBAC»ùÓÚ½ÇÉ«µÄ·ÃÎÊ¿ØÖÆ£¨Role-Based Access Control£©ÊÇÒÔ½ÇɫΪÖÐÐĽøÐзÃÎÊ¿ØÖÆ£¬±ÈÈ磺Ö÷ÌåµÄ½ÇɫΪ×ܾ­Àí¿ÉÒÔ²éѯÆóÒµÔËÓª±¨±í£¬²éѯԱ¹¤¹¤×ÊÐÅÏ¢µÈ£¬·ÃÎÊ¿ØÖÆÁ÷³ÌÈçÏ£º

ÉÏͼÖеÄÅжÏÂß¼­´úÂë¿ÉÒÔÀí½âΪ£º

if(Ö÷Ìå.hasRole("×ܾ­Àí½ÇÉ«id")){

²éѯ¹¤×Ê

}

ȱµã£ºÒÔ½ÇÉ«½øÐзÃÎÊ¿ØÖÆÁ£¶È½Ï´Ö£¬Èç¹ûÉÏͼÖвéѯ¹¤×ÊËùÐèÒªµÄ½ÇÉ«±ä»¯Îª×ܾ­ÀíºÍ²¿Ãž­Àí£¬´Ëʱ¾ÍÐèÒªÐÞ¸ÄÅжÏÂß¼­Îª¡°ÅжÏÖ÷ÌåµÄ½ÇÉ«ÊÇ·ñÊÇ×ܾ­Àí»ò²¿Ãž­Àí¡±£¬ÏµÍ³¿ÉÀ©Õ¹ÐԲ

Ð޸ĴúÂëÈçÏ£º

if(Ö÷Ìå.hasRole("×ܾ­Àí½ÇÉ«id") || Ö÷Ìå.hasRole("²¿Ãž­Àí½ÇÉ«id")){

²éѯ¹¤×Ê

}

1.3.6.2 »ùÓÚ×ÊÔ´µÄ·ÃÎÊ¿ØÖÆ

RBAC»ùÓÚ×ÊÔ´µÄ·ÃÎÊ¿ØÖÆ£¨Resource-Based Access Control£©ÊÇÒÔ×ÊԴΪÖÐÐĽøÐзÃÎÊ¿ØÖÆ£¬±ÈÈ磺Ö÷Ì屨Ðë¾ßÓвéѯ¹¤×ÊȨÏ޲ſÉÒÔ²éѯԱ¹¤¹¤×ÊÐÅÏ¢µÈ£¬·ÃÎÊ¿ØÖÆÁ÷³ÌÈçÏ£º

ÉÏͼÖеÄÅжÏÂß¼­´úÂë¿ÉÒÔÀí½âΪ£º

if(Ö÷Ìå.hasPermission("²éѯ¹¤×ÊȨÏÞ±êʶ")){

²éѯ¹¤×Ê

}

Óŵ㣺ϵͳÉè¼ÆÊ±¶¨ÒåºÃ²éѯ¹¤×ʵÄȨÏÞ±êʶ£¬¼´Ê¹²éѯ¹¤×ÊËùÐèÒªµÄ½ÇÉ«±ä»¯Îª×ܾ­ÀíºÍ²¿Ãž­ÀíÒ²Ö»ÐèÒª½«¡°²éѯ¹¤×ÊÐÅϢȨÏÞ¡±Ìí¼Óµ½¡°²¿Ãž­Àí½ÇÉ«¡±µÄȨÏÞÁбíÖУ¬ÅжÏÂß¼­²»ÓÃÐ޸ģ¬ÏµÍ³¿ÉÀ©Õ¹ÐÔÇ¿¡£

ȨÏÞ¹ÜÀí½â¾ö·½°¸

1.1 ´Ö¿ÅÁ£¶ÈºÍϸ¿ÅÁ£¶È

1.1.1 ʲôÊÇ´Ö¿ÅÁ£¶ÈºÍϸ¿ÅÁ£¶È

¶Ô×ÊÔ´ÀàÐ͵ĹÜÀí³ÆÎª´Ö¿ÅÁ£¶ÈȨÏÞ¹ÜÀí£¬¼´Ö»¿ØÖƵ½²Ëµ¥¡¢°´Å¥¡¢·½·¨£¬´ÖÁ£¶ÈµÄÀý×Ó±ÈÈ磺Óû§¾ßÓÐÓû§¹ÜÀíµÄȨÏÞ£¬¾ßÓе¼³ö¶©µ¥Ã÷ϸµÄȨÏÞ¡£¶Ô×ÊԴʵÀýµÄ¿ØÖƳÆÎªÏ¸¿ÅÁ£¶ÈȨÏÞ¹ÜÀí£¬¼´¿ØÖƵ½Êý¾Ý¼¶±ðµÄȨÏÞ£¬±ÈÈ磺Óû§Ö»ÔÊÐíÐ޸ı¾²¿ÃŵÄÔ±¹¤ÐÅÏ¢£¬Óû§Ö»ÔÊÐíµ¼³ö×Ô¼º´´½¨µÄ¶©µ¥Ã÷ϸ¡£

1.1.2 ÈçºÎʵÏÖ´Ö¿ÅÁ£¶ÈºÍϸ¿ÅÁ£¶È

¶ÔÓÚ´Ö¿ÅÁ£¶ÈµÄȨÏÞ¹ÜÀí¿ÉÒÔºÜÈÝÒ××öϵͳ¼Ü¹¹¼¶±ðµÄ¹¦ÄÜ£¬¼´ÏµÍ³¹¦ÄܲÙ×÷ʹÓÃͳһµÄ´Ö¿ÅÁ£¶ÈµÄȨÏÞ¹ÜÀí¡£

¶ÔÓÚϸ¿ÅÁ£¶ÈµÄȨÏÞ¹ÜÀí²»½¨Òé×ö³Éϵͳ¼Ü¹¹¼¶±ðµÄ¹¦ÄÜ£¬ÒòΪ¶ÔÊý¾Ý¼¶±ðµÄ¿ØÖÆÊÇϵͳµÄÒµÎñÐèÇó£¬Ëæ×ÅÒµÎñÐèÇóµÄ±ä¸üÒµÎñ¹¦Äܱ仯µÄ¿ÉÄÜÐԺܴ󣬽¨Òé¶ÔÊý¾Ý¼¶±ðµÄȨÏÞ¿ØÖÆÔÚÒµÎñ²ã¸öÐÔ»¯¿ª·¢£¬±ÈÈ磺Óû§Ö»ÔÊÐíÐÞ¸Ä×Ô¼º´´½¨µÄÉÌÆ·ÐÅÏ¢¿ÉÒÔÔÚservice½Ó¿ÚÌí¼ÓУÑéʵÏÖ£¬service½Ó¿ÚÐèÒª´«È뵱ǰ²Ù×÷È˵ıêʶ£¬ÓëÉÌÆ·ÐÅÏ¢´´½¨È˱êʶ¶Ô±È£¬²»Ò»ÖÂÔò²»ÔÊÐíÐÞ¸ÄÉÌÆ·ÐÅÏ¢¡£

1.2 »ùÓÚurlÀ¹½Ø

»ùÓÚurlÀ¹½ØÊÇÆóÒµÖг£ÓõÄȨÏÞ¹ÜÀí·½·¨£¬ÊµÏÖ˼·ÊÇ£º½«ÏµÍ³²Ù×÷µÄÿ¸öurlÅäÖÃÔÚȨÏÞ±íÖУ¬½«È¨ÏÞ¶ÔÓ¦µ½½ÇÉ«£¬½«½ÇÉ«·ÖÅ䏸Óû§£¬Óû§·ÃÎÊϵͳ¹¦ÄÜͨ¹ýFilter½øÐйýÂÇ£¬¹ýÂÇÆ÷»ñÈ¡µ½Óû§·ÃÎʵÄurl£¬Ö»Òª·ÃÎʵÄurlÊÇÓû§·ÖÅä½ÇÉ«ÖеÄurlÔò·ÅÐмÌÐø·ÃÎÊ¡£

ÈçÏÂͼ£º

1.3 ʹÓÃȨÏÞ¹ÜÀí¿ò¼Ü

¶ÔÓÚȨÏÞ¹ÜÀí»ù±¾ÉÏÿ¸öϵͳ¶¼ÓУ¬Ê¹ÓÃȨÏÞ¹ÜÀí¿ò¼ÜÍê³ÉȨÏÞ¹ÜÀí¹¦ÄܵĿª·¢¿ÉÒÔ½Úʡϵͳ¿ª·¢Ê±¼ä£¬²¢ÇÒȨÏÞ¹ÜÀí¿ò¼ÜÌṩÁËÍêÉÆµÄÈÏÖ¤ºÍÊÚȨ¹¦ÄÜÓÐÀûÓÚϵͳÀ©Õ¹Î¬»¤£¬µ«ÊÇѧϰȨÏÞ¹ÜÀí¿ò¼ÜÊÇÐèÒª³É±¾µÄ£¬ËùÒÔÑ¡ÔñÒ»¿î¼òµ¥¸ßЧµÄȨÏÞ¹ÜÀí¿ò¼ÜÏԵ÷dz£ÖØÒª¡£

»ùÓÚurlÀ¹½ØÊµÏÖ

1.1 »·¾³×¼±¸

jdk£º1.7.0_72

webÈÝÆ÷£ºtomcat7

ϵͳ¿ò¼Ü£ºspringmvc3.2.0+mybatis3.2.7

£¨Ïêϸ²Î¿¼springmvc½Ì°¸£©

ǰ̨UI£ºjquery easyUI1.2.2

1.2 Êý¾Ý¿â

´´½¨mysql5.1Êý¾Ý¿â

´´½¨Óû§±í¡¢½ÇÉ«±í¡¢È¨ÏÞ±í¡¢½ÇɫȨÏÞ¹ØÏµ±í¡¢Óû§½ÇÉ«¹ØÏµ±í¡£

µ¼Èë½Å±¾£¬Ïȵ¼Èëshiro_sql_talbe.sqlÔÙµ¼Èëshiro-sql_table_data.sql

1.3 activeUserÓû§Éí·ÝÀà

Óû§µÇ½³É¹¦¼Ç¼activeUserÐÅÏ¢²¢½«activeUser´æÈësession¡£

1.4 anonymousURL.properties

anonymousURL.properties¹«¿ª·ÃÎʵØÖ·£¬ÎÞÐèÉí·ÝÈÏÖ¤¼´¿É·ÃÎÊ¡£

1.5 commonURL.properties

commonURL.properties¹«¹²·ÃÎʵØÖ·£¬Éí·ÝÈÏ֤ͨ¹ýÎÞÐè·ÖÅäȨÏÞ¼´¿É·ÃÎÊ¡£

1.6 Óû§Éí·ÝÈÏÖ¤À¹½ØÆ÷

ʹÓÃspringmvcÀ¹½ØÆ÷¶ÔÓû§Éí·ÝÈÏÖ¤½øÐÐÀ¹½Ø£¬Èç¹ûÓû§Ã»ÓеǽÔòÌø×ªµ½µÇÂ½Ò³Ãæ£¬±¾¹¦ÄÜÒ²¿ÉÒÔʹÓÃfilterʵÏÖ ¡£

1.7 Óû§ÊÚȨÀ¹½ØÆ÷

ʹÓÃspringmvcÀ¹½ØÆ÷¶ÔÓû§·ÃÎÊurl½øÐÐÀ¹½Ø£¬Èç¹ûÓû§·ÃÎʵÄurlûÓзÖÅäȨÏÞÔòÌø×ªµ½ÎÞȨ²Ù×÷ÌáÊ¾Ò³Ãæ£¨refuse.jsp£©£¬±¾¹¦ÄÜÒ²¿ÉÒÔʹÓÃfilterʵÏÖ¡£

1.8 Óû§µÇ½

Óû§ÊäÈëÓû§Õ˺źÍÃÜÂëµÇ½£¬µÇ½³É¹¦½«Óû§µÄÉí·ÝÐÅÏ¢£¨Óû§Õ˺š¢ÃÜÂ롢ȨÏ޲˵¥¡¢È¨ÏÞurlµÈ£©¼ÇÈëactiveUserÀ࣬²¢Ð´Èësession¡£

1.8.1 controller

1.8.2 service½Ó¿Ú

shiro½éÉÜ

1.1 ʲôÊÇshiro

ShiroÊÇapacheÆìÏÂÒ»¸ö¿ªÔ´¿ò¼Ü£¬Ëü½«Èí¼þϵͳµÄ°²È«ÈÏÖ¤Ïà¹ØµÄ¹¦ÄܳéÈ¡³öÀ´£¬ÊµÏÖÓû§Éí·ÝÈÏÖ¤£¬È¨ÏÞÊÚȨ¡¢¼ÓÃÜ¡¢»á»°¹ÜÀíµÈ¹¦ÄÜ£¬×é³ÉÁËÒ»¸öͨÓõݲȫÈÏÖ¤¿ò¼Ü¡£

1.2 ΪʲôҪѧshiro

¼ÈÈ»shiro½«°²È«ÈÏÖ¤Ïà¹ØµÄ¹¦ÄܳéÈ¡³öÀ´×é³ÉÒ»¸ö¿ò¼Ü£¬Ê¹ÓÃshiro¾Í¿ÉÒԷdz£¿ìËÙµÄÍê³ÉÈÏÖ¤¡¢ÊÚȨµÈ¹¦ÄܵĿª·¢£¬½µµÍϵͳ³É±¾¡£

shiroʹÓù㷺£¬shiro¿ÉÒÔÔËÐÐÔÚwebÓ¦Ó㬷ÇwebÓ¦Ó㬼¯Èº·Ö²¼Ê½Ó¦ÓÃÖÐÔ½À´Ô½¶àµÄÓû§¿ªÊ¼Ê¹ÓÃshiro¡£

javaÁìÓòÖÐspring security(Ô­ÃûAcegi)Ò²ÊÇÒ»¸ö¿ªÔ´µÄȨÏÞ¹ÜÀí¿ò¼Ü£¬µ«ÊÇspring securityÒÀÀµspringÔËÐУ¬¶øshiro¾ÍÏà¶Ô¶ÀÁ¢£¬×îÖ÷ÒªÊÇÒòΪshiroʹÓüòµ¥¡¢Áé»î£¬ËùÒÔÏÖÔÚÔ½À´Ô½¶àµÄÓû§Ñ¡Ôñshiro¡£

1.3 Shiro¼Ü¹¹

1.3.1 Subject

Subject¼´Ö÷Ì壬ÍⲿӦÓÃÓësubject½øÐн»»¥£¬subject¼Ç¼Á˵±Ç°²Ù×÷Óû§£¬½«Óû§µÄ¸ÅÄîÀí½âΪµ±Ç°²Ù×÷µÄÖ÷Ì壬¿ÉÄÜÊÇÒ»¸öͨ¹ýä¯ÀÀÆ÷ÇëÇóµÄÓû§£¬Ò²¿ÉÄÜÊÇÒ»¸öÔËÐеijÌÐò¡£SubjectÔÚshiroÖÐÊÇÒ»¸ö½Ó¿Ú£¬½Ó¿ÚÖж¨ÒåÁ˺ܶàÈÏÖ¤ÊÚÏà¹ØµÄ·½·¨£¬Íⲿ³ÌÐòͨ¹ýsubject½øÐÐÈÏÖ¤ÊÚ£¬¶øsubjectÊÇͨ¹ýSecurityManager°²È«¹ÜÀíÆ÷½øÐÐÈÏÖ¤ÊÚȨ

1.3.2 SecurityManager

SecurityManager¼´°²È«¹ÜÀíÆ÷£¬¶ÔÈ«²¿µÄsubject½øÐа²È«¹ÜÀí£¬ËüÊÇshiroµÄºËÐÄ£¬¸ºÔð¶ÔËùÓеÄsubject½øÐа²È«¹ÜÀí¡£Í¨¹ýSecurityManager¿ÉÒÔÍê³ÉsubjectµÄÈÏÖ¤¡¢ÊÚȨµÈ£¬ÊµÖÊÉÏSecurityManagerÊÇͨ¹ýAuthenticator½øÐÐÈÏÖ¤£¬Í¨¹ýAuthorizer½øÐÐÊÚȨ£¬Í¨¹ýSessionManager½øÐлỰ¹ÜÀíµÈ¡£

SecurityManagerÊÇÒ»¸ö½Ó¿Ú£¬¼Ì³ÐÁËAuthenticator, Authorizer, SessionManagerÕâÈý¸ö½Ó¿Ú¡£

1.3.3 Authenticator

Authenticator¼´ÈÏÖ¤Æ÷£¬¶ÔÓû§Éí·Ý½øÐÐÈÏÖ¤£¬AuthenticatorÊÇÒ»¸ö½Ó¿Ú£¬shiroÌṩModularRealmAuthenticatorʵÏÖÀ࣬ͨ¹ýModularRealmAuthenticator»ù±¾ÉÏ¿ÉÒÔÂú×ã´ó¶àÊýÐèÇó£¬Ò²¿ÉÒÔ×Ô¶¨ÒåÈÏÖ¤Æ÷¡£

1.3.4 Authorizer

Authorizer¼´ÊÚȨÆ÷£¬Óû§Í¨¹ýÈÏÖ¤Æ÷ÈÏ֤ͨ¹ý£¬ÔÚ·ÃÎʹ¦ÄÜʱÐèҪͨ¹ýÊÚȨÆ÷ÅжÏÓû§ÊÇ·ñÓд˹¦ÄܵIJÙ×÷ȨÏÞ¡£

1.3.5 realm

Realm¼´ÁìÓò£¬Ï൱ÓÚdatasourceÊý¾ÝÔ´£¬securityManager½øÐа²È«ÈÏÖ¤ÐèҪͨ¹ýRealm»ñÈ¡Óû§È¨ÏÞÊý¾Ý£¬±ÈÈ磺Èç¹ûÓû§Éí·ÝÊý¾ÝÔÚÊý¾Ý¿âÄÇôrealm¾ÍÐèÒª´ÓÊý¾Ý¿â»ñÈ¡Óû§Éí·ÝÐÅÏ¢¡£

×¢Ò⣺²»Òª°ÑrealmÀí½â³ÉÖ»ÊÇ´ÓÊý¾ÝÔ´È¡Êý¾Ý£¬ÔÚrealmÖл¹ÓÐÈÏÖ¤ÊÚȨУÑéµÄÏà¹ØµÄ´úÂë¡£

1.3.6 sessionManager

sessionManager¼´»á»°¹ÜÀí£¬shiro¿ò¼Ü¶¨ÒåÁËÒ»Ì׻Ự¹ÜÀí£¬Ëü²»ÒÀÀµwebÈÝÆ÷µÄsession£¬ËùÒÔshiro¿ÉÒÔʹÓÃÔÚ·ÇwebÓ¦ÓÃÉÏ£¬Ò²¿ÉÒÔ½«·Ö²¼Ê½Ó¦ÓõĻỰ¼¯ÖÐÔÚÒ»µã¹ÜÀí£¬´ËÌØÐÔ¿ÉʹËüʵÏÖµ¥µãµÇ¼¡£

1.3.7 SessionDAO

SessionDAO¼´»á»°dao£¬ÊǶÔsession»á»°²Ù×÷µÄÒ»Ì×½Ó¿Ú£¬±ÈÈçÒª½«session´æ´¢µ½Êý¾Ý¿â£¬¿ÉÒÔͨ¹ýjdbc½«»á»°´æ´¢µ½Êý¾Ý¿â¡£

1.3.8 CacheManager

CacheManager¼´»º´æ¹ÜÀí£¬½«Óû§È¨ÏÞÊý¾Ý´æ´¢ÔÚ»º´æ£¬ÕâÑù¿ÉÒÔÌá¸ßÐÔÄÜ¡£

1.3.9 Cryptography

Cryptography¼´ÃÜÂë¹ÜÀí£¬shiroÌṩÁËÒ»Ì×¼ÓÃÜ/½âÃܵÄ×é¼þ£¬·½±ã¿ª·¢¡£±ÈÈçÌṩ³£ÓõÄÉ¢ÁС¢¼Ó/½âÃܵȹ¦ÄÜ¡£

1.4 shiroµÄjar°ü

ÓëÆäËüjava¿ªÔ´¿ò¼ÜÀàËÆ£¬½«shiroµÄjar°ü¼ÓÈëÏîÄ¿¾Í¿ÉÒÔʹÓÃshiroÌṩµÄ¹¦ÄÜÁË¡£shiro-coreÊǺËÐİü±ØÐëÑ¡Ó㬻¹ÌṩÁËÓëwebÕûºÏµÄshiro-web¡¢ÓëspringÕûºÏµÄshiro-spring¡¢ÓëÈÎÎñµ÷¶ÈquartzÕûºÏµÄshiro-quartzµÈ£¬Ï±ßÊÇshiro¸÷jar°üµÄmaven×ø±ê¡£

<dependency>

<groupId>org.apache.shiro</groupId>

<artifactId>shiro-core</artifactId>

<version>1.2.3</version>

</dependency>

<dependency>

<groupId>org.apache.shiro</groupId>

<artifactId>shiro-web</artifactId>

<version>1.2.3</version>

</dependency>

<dependency>

<groupId>org.apache.shiro</groupId>

<artifactId>shiro-spring</artifactId>

<version>1.2.3</version>

</dependency>

<dependency>

<groupId>org.apache.shiro</groupId>

<artifactId>shiro-ehcache</artifactId>

<version>1.2.3</version>

</dependency>

<dependency>

<groupId>org.apache.shiro</groupId>

<artifactId>shiro-quartz</artifactId>

<version>1.2.3</version>

</dependency>

Ò²¿ÉÒÔͨ¹ýÒýÈëshiro-all°üÀ¨shiroËùÓеİü£º

<dependency>

<groupId>org.apache.shiro</groupId>

<artifactId>shiro-all</artifactId>

<version>1.2.3</version>

</dependency>

²Î¿¼libĿ¼ £º

shiroÈÏÖ¤

1.1 ÈÏÖ¤Á÷³Ì

1.2 ÈëÃųÌÐò£¨Óû§µÇ½ºÍÍ˳ö£©

1.2.1 ´´½¨java¹¤³Ì

jdk°æ±¾£º1.7.0_72

eclipse£ºelipse-indigo

1.2.2 ¼ÓÈëshiro-coreµÄJar°ü¼°ÒÀÀµ°ü

1.2.3 log4j.propertiesÈÕÖ¾ÅäÖÃÎļþ

log4j.rootLogger=debug, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m %n

1.2.4 shiro.ini

ͨ¹ýShiro.iniÅäÖÃÎļþ³õʼ»¯SecurityManager»·¾³¡£

ÅäÖÃeclipseÖ§³ÖiniÎļþ±à¼­£º

ÔÚeclipseÅäÖúó£¬ÔÚclasspath´´½¨shiro.iniÅäÖÃÎļþ£¬ÎªÁË·½±ã²âÊÔ½«Óû§ÃûºÍÃÜÂëÅäÖõÄshiro.iniÅäÖÃÎļþÖУº

[users]

zhang=123

lisi=123

1.2.5 ÈÏÖ¤´úÂë

1.2.6 ÈÏÖ¤Ö´ÐÐÁ÷³Ì

1¡¢ ´´½¨tokenÁîÅÆ£¬tokenÖÐÓÐÓû§Ìá½»µÄÈÏÖ¤ÐÅÏ¢¼´Õ˺źÍÃÜÂë

2¡¢ Ö´ÐÐsubject.login(token)£¬×îÖÕÓÉsecurityManagerͨ¹ýAuthenticator½øÐÐÈÏÖ¤

3¡¢ AuthenticatorµÄʵÏÖModularRealmAuthenticatorµ÷ÓÃrealm´ÓiniÅäÖÃÎļþÈ¡Óû§ÕæÊµµÄÕ˺źÍÃÜÂ룬ÕâÀïʹÓõÄÊÇIniRealm£¨shiro×Ô´ø£©

4¡¢ IniRealmÏȸù¾ÝtokenÖеÄÕ˺ÅÈ¥iniÖÐÕÒ¸ÃÕ˺ţ¬Èç¹ûÕÒ²»µ½Ôò¸øModularRealmAuthenticator·µ»Ønull£¬Èç¹ûÕÒµ½ÔòÆ¥ÅäÃÜÂ룬ƥÅäÃÜÂë³É¹¦ÔòÈÏ֤ͨ¹ý¡£

1.2.7 ³£¼ûµÄÒì³£

UnknownAccountException

Õ˺Ų»´æÔÚÒì³£ÈçÏ£º

org.apache.shiro.authc.UnknownAccountException: No account found for user¡£¡£¡£¡£

IncorrectCredentialsException

µ±ÊäÈëÃÜÂë´íÎó»áÅ×´ËÒì³££¬ÈçÏ£º

org.apache.shiro.authc.IncorrectCredentialsException: Submitted credentials for token [org.apache.shiro.authc.UsernamePasswordToken - zhangsan, rememberMe=false] did not match the expected credentials.

¸ü¶àÈçÏ£º

DisabledAccountException£¨Õʺű»½ûÓã©

LockedAccountException£¨Õʺű»Ëø¶¨£©

ExcessiveAttemptsException£¨µÇ¼ʧ°Ü´ÎÊý¹ý¶à£©

ExpiredCredentialsException£¨Æ¾Ö¤¹ýÆÚ£©µÈ

1.3 ×Ô¶¨ÒåRealm

ÉϱߵijÌÐòʹÓõÄÊÇShiro×Ô´øµÄIniRealm£¬IniRealm´ÓiniÅäÖÃÎļþÖжÁÈ¡Óû§µÄÐÅÏ¢£¬´ó²¿·ÖÇé¿öÏÂÐèÒª´ÓϵͳµÄÊý¾Ý¿âÖжÁÈ¡Óû§ÐÅÏ¢£¬ËùÒÔÐèÒª×Ô¶¨Òårealm¡£

1.3.1 shiroÌṩµÄrealm

×î»ù´¡µÄÊÇRealm½Ó¿Ú£¬CachingRealm¸ºÔ𻺴洦Àí£¬AuthenticationRealm¸ºÔðÈÏÖ¤£¬AuthorizingRealm¸ºÔðÊÚȨ£¬Í¨³£×Ô¶¨ÒåµÄrealm¼Ì³ÐAuthorizingRealm¡£

1.3.2 ×Ô¶¨ÒåRealm

1.3.3 shiro-realm.ini

[main]

#×Ô¶¨Òå realm

customRealm=cn.itcast.shiro.authentication.realm.CustomRealm1

#½«realmÉèÖõ½securityManager

securityManager.realms=$customRealm

˼¿¼£ºÕâÀïΪʲô²»ÓÃÅäÖÃ[users]ÁË£¿£¿

1.3.4 ²âÊÔ´úÂë

²âÊÔ´úÂëͬÈëÃųÌÐò£¬½«iniµÄµØÖ·ÐÞ¸ÄΪshiro-realm.ini¡£

·Ö±ðÄ£ÄâÕ˺Ų»´æÔÚ¡¢ÃÜÂë´íÎó¡¢Õ˺źÍÃÜÂëÕýÈ·½øÐвâÊÔ¡£

1.4 É¢ÁÐËã·¨

É¢ÁÐËã·¨Ò»°ãÓÃÓÚÉú³ÉÒ»¶ÎÎı¾µÄÕªÒªÐÅÏ¢£¬É¢ÁÐËã·¨²»¿ÉÄæ£¬½«ÄÚÈÝ¿ÉÒÔÉú³ÉÕªÒª£¬ÎÞ·¨½«ÕªÒª×ª³ÉԭʼÄÚÈÝ¡£É¢ÁÐËã·¨³£ÓÃÓÚ¶ÔÃÜÂë½øÐÐÉ¢ÁУ¬³£ÓõÄÉ¢ÁÐËã·¨ÓÐMD5¡¢SHA¡£

Ò»°ãÉ¢ÁÐËã·¨ÐèÒªÌṩһ¸ösalt£¨ÑΣ©ÓëԭʼÄÚÈÝÉú³ÉÕªÒªÐÅÏ¢£¬ÕâÑù×öµÄÄ¿µÄÊÇΪÁ˰²È«ÐÔ£¬±ÈÈ磺111111µÄmd5ÖµÊÇ£º96e79218965eb72c92a549dd5a330112£¬ÄÃ×Å¡°96e79218965eb72c92a549dd5a330112¡±È¥md5ÆÆ½âÍøÕ¾ºÜÈÝÒ×½øÐÐÆÆ½â£¬Èç¹ûÒªÊǶÔ111111ºÍsalt£¨ÑΣ¬Ò»¸öËæ»úÊý£©½øÐÐÉ¢ÁУ¬ÕâÑùËäÈ»ÃÜÂë¶¼ÊÇ111111¼Ó²»Í¬µÄÑλáÉú³É²»Í¬µÄÉ¢ÁÐÖµ¡£

1.4.1 Àý×Ó

1.4.2 ÔÚrealmÖÐʹÓÃ

ʵ¼ÊÓ¦ÓÃÊǽ«ÑκÍÉ¢ÁкóµÄÖµ´æÔÚÊý¾Ý¿âÖУ¬×Ô¶¯realm´ÓÊý¾Ý¿âÈ¡³öÑκͼÓÃܺóµÄÖµÓÉshiroÍê³ÉÃÜÂëУÑé¡£

1.4.2.1 ×Ô¶¨Òårealm

1.4.2.2 realmÅäÖÃ

ÅäÖÃshiro-cryptography.ini

1.4.2.3 ²âÊÔ´úÂë

²âÊÔ´úÂëͬÉϸöÕ½ڣ¬×¢ÒâÐÞ¸Äini·¾¶¡£

shiroÊÚȨ

1.1 ÊÚȨÁ÷³Ì

1.2 ÊÚȨ·½Ê½

Shiro Ö§³ÖÈýÖÖ·½Ê½µÄÊÚȨ£º

±à³Ìʽ£ºÍ¨¹ýдif/else ÊÚȨ´úÂë¿éÍê³É£º

Subject subject = SecurityUtils.getSubject();

if(subject.hasRole(¡°admin¡±)) {

//ÓÐȨÏÞ

} else {

//ÎÞȨÏÞ

}

×¢½âʽ£ºÍ¨¹ýÔÚÖ´ÐеÄJava·½·¨ÉÏ·ÅÖÃÏàÓ¦µÄ×¢½âÍê³É£º

@RequiresRoles("admin")

public void hello() {

//ÓÐȨÏÞ

}

JSP/GSP ±êÇ©£ºÔÚJSP/GSP Ò³ÃæÍ¨¹ýÏàÓ¦µÄ±êÇ©Íê³É£º

<shiro:hasRole name="admin">

<!¡ª ÓÐȨÏÞ¡ª>

</shiro:hasRole>

±¾½Ì³ÌÐòÊÚȨ²âÊÔʹÓõÚÒ»ÖÖ±à³Ì·½Ê½£¬Êµ¼ÊÓëwebϵͳ¼¯³ÉʹÓúóÁ½ÖÖ·½Ê½¡£

1.3 ÊÚȨ²âÊÔ

1.3.1 shiro-permission.ini

´´½¨´æ·ÅȨÏÞµÄÅäÖÃÎļþshiro-permission.ini£¬ÈçÏ£º

ÔÚiniÎļþÖÐÓû§¡¢½ÇÉ«¡¢È¨ÏÞµÄÅäÖùæÔòÊÇ£º¡°Óû§Ãû=ÃÜÂ룬½ÇÉ«1£¬½ÇÉ«2...¡± ¡°½ÇÉ«=ȨÏÞ1£¬È¨ÏÞ2...¡±£¬Ê×Ïȸù¾ÝÓû§ÃûÕÒ½ÇÉ«£¬ÔÙ¸ù¾Ý½ÇÉ«ÕÒȨÏÞ£¬½ÇÉ«ÊÇȨÏÞ¼¯ºÏ¡£

1.3.2 ȨÏÞ×Ö·û´®¹æÔò

ȨÏÞ×Ö·û´®µÄ¹æÔòÊÇ£º¡°×ÊÔ´±êʶ·û£º²Ù×÷£º×ÊԴʵÀý±êʶ·û¡±£¬Òâ˼ÊǶÔÄĸö×ÊÔ´µÄÄĸöʵÀý¾ßÓÐʲô²Ù×÷£¬¡°:¡±ÊÇ×ÊÔ´/²Ù×÷/ʵÀýµÄ·Ö¸î·û£¬È¨ÏÞ×Ö·û´®Ò²¿ÉÒÔʹÓÃ*ͨÅä·û¡£

Àý×Ó£º

Óû§´´½¨È¨ÏÞ£ºuser:create£¬»òuser:create:*

Óû§ÐÞ¸ÄʵÀý001µÄȨÏÞ£ºuser:update:001

Óû§ÊµÀý001µÄËùÓÐȨÏÞ£ºuser£º*£º001

1.3.3 ²âÊÔ´úÂë

²âÊÔ´úÂëͬÈÏÖ¤´úÂ룬עÒâiniµØÖ·¸ÄΪshiro-permission.ini£¬Ö÷ҪѧϰϱßÊÚȨµÄ·½·¨£¬×¢Ò⣺ÔÚÓû§ÈÏ֤ͨ¹ýºóÖ´ÐÐϱߵÄÊÚȨ´úÂë¡£

1.3.4 »ùÓÚ½ÇÉ«µÄÊÚȨ

¶ÔÓ¦µÄcheck·½·¨£º

Éϱßcheck·½·¨Èç¹ûÊÚȨʧ°ÜÔòÅ׳öÒì³££º

org.apache.shiro.authz.UnauthorizedException: Subject does not have role [.....]

1.3.5 »ùÓÚ×ÊÔ´ÊÚȨ

¶ÔÓ¦µÄcheck·½·¨£º

Éϱßcheck·½·¨Èç¹ûÊÚȨʧ°ÜÔòÅ׳öÒì³££º

org.apache.shiro.authz.UnauthorizedException: Subject does not have permission [....]

1.4 ×Ô¶¨Òårealm

ÓëÉϱßÈÏÖ¤×Ô¶¨ÒårealmÒ»Ñù£¬´ó²¿·ÖÇé¿öÊÇÒª´ÓÊý¾Ý¿â»ñȡȨÏÞÊý¾Ý£¬ÕâÀïÖ±½ÓʵÏÖ»ùÓÚ×ÊÔ´µÄÊÚȨ¡£

1.4.1 realm´úÂë

ÔÚÈÏÖ¤Õ½ÚдµÄ×Ô¶¨ÒårealmÀàÖÐÍêÉÆdoGetAuthorizationInfo·½·¨£¬´Ë·½·¨ÐèÒªÍê³É£º¸ù¾ÝÓû§Éí·ÝÐÅÏ¢´ÓÊý¾Ý¿â²éѯȨÏÞ×Ö·û´®£¬ÓÉshiro½øÐÐÊÚȨ¡£

1.4.2 shiro-realm.ini

iniÅäÖÃÎļþ»¹Ê¹ÓÃÈÏÖ¤½×¶ÎʹÓõ쬲»Óøı䡣

˼¿¼£ºshiro-permission.iniÖеÄ[roles]Ϊʲô²»ÐèÒªÁË£¿£¿

1.4.3 ²âÊÔ´úÂë

ͬÉϱߵÄÊÚȨ²âÊÔ´úÂ룬עÒâÐÞ¸ÄiniµØÖ·Îªshiro-realm.ini¡£

1.4.4 ÊÚȨִÐÐÁ÷³Ì

1¡¢Ö´ÐÐsubject.isPermitted("user:create")

2¡¢securityManagerͨ¹ýModularRealmAuthorizer½øÐÐÊÚȨ

3¡¢ModularRealmAuthorizerµ÷ÓÃrealm»ñȡȨÏÞÐÅÏ¢

4¡¢ModularRealmAuthorizerÔÙͨ¹ýpermissionResolver½âÎöȨÏÞ×Ö·û´®£¬Ð£ÑéÊÇ·ñÆ¥Åä

shiroÓëÏîÄ¿¼¯³É¿ª·¢

1.1 shiroÓëspring webÏîÄ¿ÕûºÏ

shiroÓëspringwebÏîÄ¿ÕûºÏÔÚ¡°»ùÓÚurlÀ¹½ØÊµÏֵŤ³Ì¡±»ù´¡ÉÏÕûºÏ£¬»ùÓÚurlÀ¹½ØÊµÏֵŤ³ÌµÄ¼¼Êõ¼Ü¹¹ÊÇspringmvc+mybatis£¬ÕûºÏ×¢ÒâÁ½µã£º

1¡¢shiroÓëspringÕûºÏ

2¡¢¼ÓÈëshiro¶ÔwebÓ¦ÓõÄÖ§³Ö

1.1.1 È¡ÏûÔ­springmvcÈÏÖ¤ºÍÊÚȨÀ¹½ØÆ÷

È¥µôspringmvc.xmlÖÐÅäÖõÄLoginInterceptorºÍPermissionInterceptorÀ¹½ØÆ÷¡£

1.1.2 ¼ÓÈëshiroµÄ jar°ü

1.1.3 web.xmlÌí¼Óshiro Filter

1.1.4 applicationContext-shiro.xml

securityManager£ºÕâ¸öÊôÐÔÊDZØÐëµÄ¡£

loginUrl£ºÃ»ÓеǼÈÏÖ¤µÄÓû§ÇëÇó½«Ìø×ªµ½´ËµØÖ·½øÐÐÈÏÖ¤£¬²»ÊDZØÐëµÄÊôÐÔ£¬²»ÊäÈëµØÖ·µÄ»°»á×Ô¶¯Ñ°ÕÒÏîÄ¿webÏîÄ¿µÄ¸ùĿ¼Ïµġ±/login.jsp¡±Ò³Ãæ¡£

unauthorizedUrl£ºÃ»ÓÐȨÏÞĬÈÏÌø×ªµÄÒ³Ãæ¡£

1.1.5 ×Ô¶¨Òårealm

´ËrealmÏȲ»´ÓÊý¾Ý¿â²éѯȨÏÞÊý¾Ý£¬µ±Ç°ÐèÒªÏȽ«shiroÕûºÏÍê³É£¬ÔÚÉϱßÕ½ڶ¨ÒåµÄrealm»ù´¡ÉÏÐ޸ġ£

1.1.6 怬

1.1.7 Ê×Ò³

ÓÉÓÚsessionÓÉshiro¹ÜÀí£¬ÐèÒªÐÞ¸ÄÊ×Ò³µÄcontroller·½·¨£¬½«sessionÖеÄÊý¾Ýͨ¹ýmodel´«µ½Ò³Ãæ¡£

1.1.8 Í˳ö

ÓÉÓÚʹÓÃshiroµÄsessionManager£¬²»Óÿª·¢Í˳ö¹¦ÄÜ£¬Ê¹ÓÃshiroµÄlogoutÀ¹½ØÆ÷¼´¿É¡£

<!-- Í˳öÀ¹½Ø£¬ÇëÇólogout.actionÖ´ÐÐÍ˳ö²Ù×÷ -->

/logout.action = logout

1.1.9 ÎÞȨÏÞrefuse.jsp

µ±Óû§ÎÞ²Ù×÷ȨÏÞ£¬shiro½«Ìø×ªµ½refuse.jspÒ³Ãæ¡£

1.1.10 shiro¹ýÂÇÆ÷×ܽá

anon:Àý×Ó/admins/**=anon ûÓвÎÊý£¬±íʾ¿ÉÒÔÄäÃûʹÓá£

authc:ÀýÈç/admins/user/**=authc±íʾÐèÒªÈÏÖ¤(µÇ¼)²ÅÄÜʹÓã¬FormAuthenticationFilterÊÇ±íµ¥ÈÏÖ¤£¬Ã»ÓвÎÊý

roles:Àý×Ó/admins/user/**=roles[admin],²ÎÊý¿ÉÒÔд¶à¸ö£¬¶à¸öʱ±ØÐë¼ÓÉÏÒýºÅ£¬²¢ÇÒ²ÎÊýÖ®¼äÓöººÅ·Ö¸î£¬µ±Óжà¸ö²ÎÊýʱ£¬ÀýÈçadmins/user/**=roles["admin,guest"],ÿ¸ö²ÎÊýͨ¹ý²ÅËãͨ¹ý£¬Ï൱ÓÚhasAllRoles()·½·¨¡£

perms:Àý×Ó/admins/user/**=perms[user:add:*],²ÎÊý¿ÉÒÔд¶à¸ö£¬¶à¸öʱ±ØÐë¼ÓÉÏÒýºÅ£¬²¢ÇÒ²ÎÊýÖ®¼äÓöººÅ·Ö¸î£¬ÀýÈç/admins/user/**=perms["user:add:*,user:modify:*"]£¬µ±Óжà¸ö²ÎÊýʱ±ØÐëÿ¸ö²ÎÊý¶¼Í¨¹ý²Åͨ¹ý£¬Ïëµ±ÓÚisPermitedAll()·½·¨¡£

rest:Àý×Ó/admins/user/**=rest[user],¸ù¾ÝÇëÇóµÄ·½·¨£¬Ï൱ÓÚ/admins/user/**=perms[user:method] ,ÆäÖÐmethodΪpost£¬get£¬deleteµÈ¡£

port:Àý×Ó/admins/user/**=port[8081],µ±ÇëÇóµÄurlµÄ¶Ë¿Ú²»ÊÇ8081ÊÇÌø×ªµ½schemal://serverName:8081?queryString,ÆäÖÐschmalÊÇЭÒéhttp»òhttpsµÈ£¬serverNameÊÇÄã·ÃÎʵÄhost,8081ÊÇurlÅäÖÃÀïportµÄ¶Ë¿Ú£¬queryStringÊÇÄã·ÃÎʵÄurlÀïµÄ£¿ºóÃæµÄ²ÎÊý¡£

authcBasic:ÀýÈç/admins/user/**=authcBasicûÓвÎÊý±íʾhttpBasicÈÏÖ¤

ssl:Àý×Ó/admins/user/**=sslûÓвÎÊý£¬±íʾ°²È«µÄurlÇëÇó£¬Ð­ÒéΪhttps

user:ÀýÈç/admins/user/**=userûÓвÎÊý±íʾ±ØÐë´æÔÚÓû§, Éí·ÝÈÏ֤ͨ¹ý»òͨ¹ý¼ÇסÎÒÈÏ֤ͨ¹ýµÄ¿ÉÒÔ·ÃÎÊ£¬µ±µÇÈë²Ù×÷ʱ²»×ö¼ì²é

×¢£º

anon£¬authcBasic£¬auchc£¬userÊÇÈÏÖ¤¹ýÂËÆ÷£¬

perms£¬roles£¬ssl£¬rest£¬portÊÇÊÚȨ¹ýÂËÆ÷

1.2 ÈÏÖ¤

1.2.1 Ìí¼Óƾ֤ƥÅäÆ÷

Ìí¼Óƾ֤ƥÅäÆ÷ʵÏÖmd5¼ÓÃÜУÑé¡£

ÐÞ¸ÄapplicationContext-shiro.xml£º

1.2.2 ÐÞ¸ÄrealmÈÏÖ¤·½·¨

ÐÞ¸Ärealm´úÂë´ÓÊý¾Ý¿âÖвéѯÓû§Éí·ÝÐÅÏ¢£¬½«sysService×¢Èërealm¡£

1.3 ÊÚȨ

1.3.1 ÐÞ¸ÄrealmÊÚȨ·½·¨

ÐÞ¸Ärealm´úÂë´ÓÊý¾Ý¿âÖвéѯȨÏÞÐÅÏ¢£¬½«sysService×¢Èërealm¡£

1.3.2 ¶Ôcontroller¿ªÆôAOP

ÔÚspringmvc.xmlÖÐÅäÖÃshiro×¢½âÖ§³Ö£¬¿ÉÔÚcontroller·½·¨ÖÐʹÓÃshiro×¢½âÅäÖÃȨÏÞ£º

1.3.3 ȨÏÞ×¢½â¿ØÖÆ

ÉÌÆ·²éѯcontroller·½·¨Ìí¼ÓȨÏÞ£¨item:query£©£º

ÉϱߴúÂë@RequiresPermissions("item:query")±íʾ±ØÐëÓµÓС°item:query¡±È¨ÏÞ·½¿ÉÖ´ÐС£

ͬÀí£¬ÉÌÆ·ÐÞ¸Äcontroller·½·¨Ìí¼ÓȨÏÞ£¨item:update£©£º

1.3.4 jsp±êÇ©¿ØÖÆ1.3.4.1 ±êÇ©½éÉÜ

JspÒ³ÃæÌí¼Ó£º

<%@ tagliburi="http://shiro.apache.org/tags"prefix="shiro" %>

1.3.4.2 jspÒ³ÃæÌí¼Ó±êÇ©

Èç¹ûÓÐÉÌÆ·ÐÞ¸ÄȨÏÞÒ³ÃæÏÔʾ¡°Ð޸ġ±Á´½Ó¡£

1.4 »º´æ

shiroÿ´ÎÊÚȨ¶¼»áͨ¹ýrealm»ñȡȨÏÞÐÅÏ¢£¬ÎªÁËÌá¸ß·ÃÎÊËÙ¶ÈÐèÒªÌí¼Ó»º´æ£¬µÚÒ»´Î´ÓrealmÖжÁȡȨÏÞÊý¾Ý£¬Ö®ºó²»ÔÙ¶ÁÈ¡£¬ÕâÀïShiroºÍEhcacheÕûºÏ¡£

1.4.1 Ìí¼ÓEhcacheµÄjar°ü

1.4.2 ÅäÖÃcacheManager

ÔÚapplicationContext-shiro.xmlÖÐÅäÖûº´æ¹ÜÀíÆ÷¡£

1.4.3 ÅäÖÃshiro-ehcache.xml

1.4.4 Çå¿Õ»º´æ

µ±Óû§È¨ÏÞÐ޸ĺó£¬Óû§Ôٴεǽshiro»á×Ô¶¯µ÷ÓÃrealm´ÓÊý¾Ý¿â»ñȡȨÏÞÊý¾Ý£¬Èç¹ûÔÚÐÞ¸ÄȨÏÞºóÏëÁ¢¼´Çå³ý»º´æÔò¿ÉÒÔµ÷ÓÃrealmµÄclearCache·½·¨Çå³ý»º´æ¡£

realmÖж¨ÒåclearCached·½·¨£º

ÔÚȨÏÞÐ޸ĺóµ÷ÓÃrealmÖеķ½·¨£¬realmÒѾ­ÓÉspring¹ÜÀí£¬ËùÒÔ´ÓspringÖлñÈ¡realmʵÀý£¬µ÷ÓÃclearCached·½·¨¡£

1.5 session¹ÜÀí

ÔÚapplicationContext-shiro.xmlÖÐÅäÖÃsessionManager£º

1.6 ÑéÖ¤Âë

1.6.1 ×Ô¶¨ÒåFormAuthenticationFilter

ÐèÒªÔÚÑéÖ¤Õ˺źÍÃû³ÆÖ®Ç°Ð£ÑéÑéÖ¤Âë¡£

1.6.2 FormAuthenticationFilterÅäÖÃ

ÐÞ¸ÄapplicationContext-shiro.xmlÖжÔFormAuthenticationFilterµÄÅäÖá£

ÔÚshiroFilterÖÐÌí¼Ófilters£º

formAuthenticationFilter¶¨Òå

1.6.3 µÇÂ½Ò³Ãæ

Ìí¼ÓÑéÖ¤Â룺

1.6.4 ÅäÖÃvalidatecode.jspÄäÃû·ÃÎÊ

ÐÞ¸ÄapplicationContext-shiro.xml£º

1.7 ¼ÇסÎÒ

Óû§µÇ½ѡÔñ¡°×Ô¶¯µÇ½¡±±¾´ÎµÇ½³É¹¦»áÏòcookieдÉí·ÝÐÅÏ¢£¬Ï´εǽ´ÓcookieÖÐÈ¡³öÉí·ÝÐÅϢʵÏÖ×Ô¶¯µÇ½¡£

1.7.1 Óû§Éí·ÝʵÏÖjava.io.Serializable½Ó¿Ú

Ïòcookie¼Ç¼Éí·ÝÐÅÏ¢ÐèÒªÓû§Éí·ÝÐÅÏ¢¶ÔÏóʵÏÖÐòÁл¯½Ó¿Ú£¬ÈçÏ£º

1.7.2 ÅäÖÃrememberMeManager

1.7.3 FormAuthenticationFilterÅäÖÃ

ÐÞ¸ÄformAuthenticationFitlerÌí¼ÓÒ³ÃæÖС°¼ÇסÎÒcheckbox¡±µÄinputÃû³Æ£º

1.7.4 µÇÂ½Ò³Ãæ

ÔÚlogin.jspÖÐÌí¼Ó¡°¼ÇסÎÒ¡±checkbox¡£·µ»ØËѺü£¬²é¿´¸ü¶à

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

iOSÓ¦Óð²È«¿ª·¢£¬Äã²»ÖªµÀµÄÄÇЩÊÂÊõ
Web°²È«Ö®SQL×¢Èë¹¥»÷
ÒÆ¶¯APP°²È«ÔÚÉøÍ¸²âÊÔÖеÄÓ¦ÓÃ
´ÓGoogle±¸·Ý»¥ÁªÍø¿´¡°Êý¾Ý°²È«¡±
 
Ïà¹ØÎĵµ

web°²È«Éè¼ÆÓë·À»¤
»¥ÁªÍøº£Á¿ÄÚÈݰ²È«´¦Àí¼¼Êõ
ºÚ¿Í¹¥»÷Óë·À·¶¼¼Êõ
WEBºÚºÐ°²È«¼ì²â
 
Ïà¹Ø¿Î³Ì

WEBÍøÕ¾ÓëÓ¦Óð²È«Ô­ÀíÓëʵ¼ù
webÓ¦Óð²È«¼Ü¹¹Éè¼Æ
´´½¨°²È«µÄJ2EE WebÓ¦ÓôúÂë
ÐÅÏ¢°²È«ÎÊÌâÓë·À·¶
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
ÎïÁªÍø°²È«¸ÅÊö
Ê·ÉÏ×îÏêϸµÄÇø¿éÁ´¼¼Êõ¼Ü¹¹·ÖÎö
Ò»ÎĶÁ¶®Çø¿éÁ´ÕûÌå¼Ü¹¹¼°Ó¦Óð¸Àý
Çø¿éÁ´¼¼Êõ¼Ü¹¹
°²È«¼Ü¹¹ÆÀÉóʵս
×îпγÌ
WebÓ¦Óð²È«¼Ü¹¹¡¢ÈëÇÖ¼ì²âÓë·À»¤
ÎïÁªÍø¹Ø¼ü¼¼Êõ¡¢°²È«Óë±ßÔµ¼ÆËã
Çø¿éÁ´°²È«¼¼Êõʵ¼ùÖ¸ÄÏ
ÔÆ·þÎñÓ밲ȫ¼Ü¹¹
»¥ÁªÍø°²È«¿ª·¢·½·¨Óëʵ¼ù
³É¹¦°¸Àý
ÖйúÒøÐÐ ÐÅÏ¢°²È«¼¼Êõ¼°Éî¶È·ÀÓù
±±¾© WebÓ¦Óð²È«¼Ü¹¹¡¢ÈëÇÖ¼ì²âÓë·À»¤
ij²ÆË°ÁìÓòÖªÃûIT·þÎñÉÌ Web°²È«²âÊÔ
ÆÕÈð¿Ë˹ web°²È«Éè¼Æ¡¢²âÊÔÓëÓÅ»¯
±±¾©ºÍÀûʱ ÐÔÄܺͰ²È«ÐÔ²âÊÔ