±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜÁËʲôÊÇȨÏÞ¹ÜÀí£¬Óû§Éí·ÝÈÏÖ¤£¬ÊÚȨ£¬È¨ÏÞ¹ÜÀí½â¾ö·½°¸£¬Óû§Éí·ÝÈÏÖ¤À¹½ØÆ÷¼°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¡£·µ»ØËѺü£¬²é¿´¸ü¶à |