¸üÐÂʱ¼ä:2018Äê08ÔÂ31ÈÕ14ʱ01·Ö À´Ô´:ÀÖÓã²¥¿Í ä¯ÀÀ´ÎÊý:
¡¡¡¡Ò»¡¢Shiro½éÉÜ
¡¡¡¡1¡¢Apache ShiroÊÇÒ»¸öÇ¿´óÇÒÒ×ÓõÄJava°²È«¿ò¼Ü,Ö´ÐÐÉí·ÝÑéÖ¤¡¢ÊÚȨ¡¢ÃÜÂëѧºÍ»á»°¹ÜÀí¡£
¡¡¡¡2¡¢Ê¹ÓÃShiroµÄÒ×ÓÚÀí½âµÄAPI,Äú¿ÉÒÔ¿ìËÙ¡¢ÇáËɵػñµÃÈκÎÓ¦ÓóÌÐò,´Ó×îСµÄÒÆ¶¯Ó¦ÓóÌÐòµ½×î´óµÄÍøÂçºÍÆóÒµÓ¦ÓóÌÐò
¡¡¡¡¶þ¡¢ShiroÌåϵ½á¹¹
¡¡¡¡1¡¢ Authentication ÈÏÖ¤ ©\©\©\©\ Óû§µÇ¼£¬Éí·Ýʶ±ð
¡¡¡¡2¡¢ Authorization ÊÚȨ ©\©\©\ Óû§¾ßÓÐÄÄЩȨÏÞ¡¢½ÇÉ«
¡¡¡¡3¡¢ Cryptography °²È«Êý¾Ý¼ÓÃÜ
¡¡¡¡4¡¢ Session Management »á»°¹ÜÀí
¡¡¡¡5¡¢ Web Integration web ϵͳ¼¯³É
¡¡¡¡6¡¢ Integrations ¼¯³ÉÆäËüÓ¦Ó㬠spring¡¢»º´æ¿ò¼Ü
¡¡¡¡Èý¡¢ShiroÖ÷ÒªÔËÐÐÁ÷³Ì
¡¡¡¡Ó¦ÓóÌÐò ©\©\©\ Subject ©\©\©\ SecurityManager ©\©\©\ Realm ©\©\©\ °²È«Êý¾Ý(Êý¾Ý¿â)
¡¡¡¡Subject½éÉÜ£º
¡¡¡¡1¡¢Subject ÊÇÓë³ÌÐò½øÐн»»¥µÄ¶ÔÏ󣬿ÉÒÔÊÇÈËÒ²¿ÉÒÔÊÇ·þÎñ»òÕ߯äËû£¬Í¨³£¾ÍÀí½âΪÓû§¡£
¡¡¡¡2¡¢ËùÓÐ Subject ʵÀý¶¼±»°ó¶¨µ½(ÇÒÕâÊDZØÐëµÄ)Ò»¸ö SecurityManager ÉÏ¡£µ±ÄãÓëÒ»¸öSubject ½»»¥Ê±£¬ÄÇЩ½»»¥×÷ÓÃת»¯ÎªÓë SecurityManager ½»»¥µÄÌØ¶¨ subject µÄ½»»¥×÷Óá£
¡¡¡¡SecurityManager½éÉÜ£º
¡¡¡¡1¡¢SecurityManager ÊÇ ShiroµÄºËÐÄ£¬³õʼ»¯Ê±Ðµ÷¸÷¸öÄ£¿éÔËÐС£È»¶ø£¬Ò»µ© SecurityManagerе÷Íê±Ï£¬SecurityManager »á±»µ¥¶ÀÁôÏ£¬ÇÒÎÒÃÇÖ»ÐèҪȥ²Ù×÷Subject¼´¿É£¬ÎÞÐè²Ù×÷SecurityManager ¡£
¡¡¡¡2¡¢µ±ÎÒÃÇÕýÓëÒ»¸ö Subject ½øÐн»»¥Ê±£¬ÊµÖÊÉÏÊÇ SecurityManagerÔÚ´¦Àí Subject °²È«²Ù×÷¡£
¡¡¡¡Realm½éÉÜ£º
¡¡¡¡1¡¢Realms µ£µ± Shiro ºÍÄãµÄÓ¦ÓóÌÐòµÄ°²È«Êý¾ÝÖ®¼äµÄ“ÇÅÁº”»ò“Á¬½ÓÆ÷”¡£µ±Ëüʵ¼ÊÉÏÓ밲ȫÏà¹ØµÄÊý¾ÝÈçÓÃÀ´Ö´ÐÐÉí·ÝÑéÖ¤(µÇ¼)¼°ÊÚȨ(·ÃÎÊ¿ØÖÆ)µÄÓû§ÕÊ»§½»»¥Ê±£¬ Shiro ´ÓÒ»¸ö»ò¶à¸öΪӦÓóÌÐòÅäÖõÄRealm ÖÐѰÕÒÐí¶àÕâÑùµÄ¶«Î÷¡£
¡¡¡¡2¡¢ÔÚÕâ¸öÒâÒåÉÏ˵£¬ Realm ±¾ÖÊÉÏÊÇÒ»¸öÌØ¶¨°²È«µÄ DAO£ºËü·â×°ÁËÊý¾ÝÔ´µÄÁ¬½ÓÏêϸÐÅÏ¢£¬Ê¹ Shiro ËùÐèµÄÏà¹ØµÄÊý¾Ý¿ÉÓᣵ±ÅäÖà Shiro ʱ£¬Äã±ØÐëÖ¸¶¨ÖÁÉÙÒ»¸ö Realm ÓÃÀ´½øÐÐÉí·ÝÑéÖ¤ºÍ/»òÊÚȨ¡£ SecurityManager¿ÉÄÜÅäÖöà¸ö Realms£¬µ«ÖÁÉÙÓÐÒ»¸öÊDZØÐëµÄ
¡¡¡¡ËÄ¡¢ShiroµÄʹÓÃ
¡¡¡¡1¡¢ ÅäÖà web.xml£¬Ôö¼ÓshiroµÄFilter
¡¡¡¡2¡¢ÔÚspringÅäÖÃÎļþÖУ¬Ôö¼ÓshiroµÄÏà¹ØÅäÖÃ
¡¡¡¡shiroFilter
¡¡¡¡org.springframework.web.filter.DelegatingFilterProxy
¡¡¡¡shiroFilter
¡¡¡¡/*
¡¡¡¡class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
¡¡¡¡/login.html* = anon
¡¡¡¡/user_login.action* = anon
¡¡¡¡/validatecode.jsp* = anon
¡¡¡¡/css/** = anon
¡¡¡¡/js/** = anon
¡¡¡¡/images/** = anon
¡¡¡¡/services/** = anon
¡¡¡¡/pages/base/courier.html* = perms[courier:list]
¡¡¡¡/pages/base/area.html* = roles[base]
¡¡¡¡/** = authc
¡¡¡¡class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
¡¡¡¡±±¾©ÊвýÆ½Çø½¨²Ä³ÇÎ÷·½ðÑàÁú°ì¹«Â¥Ò»²ã µç»°£º400-618-9090
¡¡¡¡3¡¢±àдrealm
¡¡¡¡public class BosRealm extends AuthorizingRealm {
¡¡¡¡@Autowired
¡¡¡¡private UserService userService;
¡¡¡¡@Autowired
¡¡¡¡private RoleService roleService;
¡¡¡¡@Autowired
¡¡¡¡private PermissionService permissionService;
¡¡¡¡@Override
¡¡¡¡// ÊÚȨ...
¡¡¡¡protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection pc) {
¡¡¡¡System.out.println("shiro ÊÚȨ¹ÜÀí...");
¡¡¡¡SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
¡¡¡¡// ¸ù¾Ýµ±Ç°µÇ¼Óû§ ²éѯ¶ÔÓ¦½ÇÉ«ºÍȨÏÞ
¡¡¡¡Subject subject = SecurityUtils.getSubject();
¡¡¡¡User user = (User) subject.getPrincipal();
¡¡¡¡// µ÷ÓÃÒµÎñ²ã£¬²éѯ½ÇÉ«
¡¡¡¡List roles = roleService.findByUser(user);
¡¡¡¡for (Role role : roles) {
¡¡¡¡authorizationInfo.addRole(role.getKeyword());
¡¡¡¡} /
¡¡¡¡/ µ÷ÓÃÒµÎñ²ã£¬²éѯȨÏÞ
¡¡¡¡List permissions = permissionService.findByUser(user);
¡¡¡¡for (Permission permission : permissions) {
¡¡¡¡authorizationInfo.addStringPermission(permission.getKeyword());
¡¡¡¡} r
¡¡¡¡eturn authorizationInfo;
¡¡¡¡} @
¡¡¡¡Override
¡¡¡¡// ÈÏÖ¤...
¡¡¡¡protected AuthenticationInfo doGetAuthenticationInfo(
¡¡¡¡AuthenticationToken token) throws AuthenticationException {
¡¡¡¡System.out.println("shiro ÈÏÖ¤¹ÜÀí... ");
¡¡¡¡// ת»»token
¡¡¡¡UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) token;
¡¡¡¡// ¸ù¾ÝÓû§Ãû ²éѯ Óû§ÐÅÏ¢
¡¡¡¡User user = userService.findByUsername(usernamePasswordToken
¡¡¡¡.getUsername());
¡¡¡¡if (user == null) {
¡¡¡¡// Óû§Ãû²»´æÔÚ
¡¡¡¡// ²ÎÊýÒ»£º ÆÚÍûµÇ¼ºó£¬±£´æÔÚSubjectÖÐÐÅÏ¢
¡¡¡¡±±¾©ÊвýÆ½Çø½¨²Ä³ÇÎ÷·½ðÑàÁú°ì¹«Â¥Ò»²ã µç»°£º400-618-9090
¡¡¡¡Î塢ȨÏÞ¿ØÖƱí½á¹¹
¡¡¡¡// ²ÎÊý¶þ£º Èç¹û·µ»ØÎªnull ˵Ã÷Óû§²»´æÔÚ£¬±¨Óû§Ãû
¡¡¡¡// ²ÎÊýÈý £ºrealmÃû³Æ
¡¡¡¡return null;
¡¡¡¡} else {
¡¡¡¡// Óû§Ãû´æÔÚ
¡¡¡¡// µ±·µ»ØÓû§ÃÜÂëʱ£¬securityManager°²È«¹ÜÀíÆ÷£¬×Ô¶¯±È½Ï·µ»ØÃÜÂëºÍÓû§ÊäÈëÃÜÂëÊÇ·ñ
¡¡¡¡Ò»ÖÂ
¡¡¡¡// Èç¹ûÃÜÂëÒ»Ö µÇ¼³É¹¦£¬ Èç¹ûÃÜÂë²»Ò»Ö ±¨ÃÜÂë´íÎóÒì³£
¡¡¡¡return new SimpleAuthenticationInfo(user, user.getPassword(),
¡¡¡¡getName());
¡¡¡¡}
¡¡¡¡}
¡¡¡¡}
×÷ÕߣºÀÖÓã²¥¿ÍJavaEEÅàѵѧԺ
Ê×·¢£ºhttp://java.itcast.cn
±±¾©Ð£Çø