package com.java2nb.system.shiro; import java.util.*; import com.java2nb.common.config.ApplicationContextRegister; import com.java2nb.system.dao.DataPermDao; import com.java2nb.system.dao.DeptDao; import com.java2nb.system.domain.DataPermDO; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.IncorrectCredentialsException; import org.apache.shiro.authc.LockedAccountException; import org.apache.shiro.authc.SimpleAuthenticationInfo; import org.apache.shiro.authc.UnknownAccountException; import org.apache.shiro.authz.AuthorizationInfo; import org.apache.shiro.authz.SimpleAuthorizationInfo; import org.apache.shiro.realm.AuthorizingRealm; import org.apache.shiro.subject.PrincipalCollection; import com.java2nb.common.utils.ShiroUtils; import com.java2nb.system.dao.SysUserDao; import com.java2nb.system.domain.UserDO; import com.java2nb.system.service.MenuService; public class UserRealm extends AuthorizingRealm { /* @Autowired UserDao userMapper; @Autowired MenuService menuService;*/ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) { Long userId = ShiroUtils.getUserId(); MenuService menuService = ApplicationContextRegister.getBean(MenuService.class); Set perms = menuService.listPerms(userId); SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); info.setStringPermissions(perms); return info; } @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { String username = (String) token.getPrincipal(); Map map = new HashMap<>(16); map.put("username", username); String password = new String((char[]) token.getCredentials()); SysUserDao userMapper = ApplicationContextRegister.getBean(SysUserDao.class); // 查询用户信息 UserDO user = userMapper.list(map).get(0); // 账号不存在 if (user == null) { throw new UnknownAccountException("账号或密码不正确"); } // 密码错误 if (!password.equals(user.getPassword())) { throw new IncorrectCredentialsException("账号或密码不正确"); } // 账号锁定 if (user.getStatus() == 0) { throw new LockedAccountException("账号已被锁定,请联系管理员"); } //查询下级部门 DeptDao deptDao = ApplicationContextRegister.getBean(DeptDao.class); user.setSupDeptIds(deptDao.getDeptIdsByParentId(user.getDeptId())); //查询数据权限 DataPermDao dataPermDao = ApplicationContextRegister.getBean(DataPermDao.class); List dataPerms = dataPermDao.selectDataPermsByUserId(user.getUserId()); Map> permsMap = new HashMap<>(); for (DataPermDO perm : dataPerms) { String key = perm.getTableName(); List value = permsMap.get(key); if (value == null) { value = new ArrayList<>(); permsMap.put(key, value); } value.add(perm); } user.setDataPerms(permsMap); SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, password, getName()); return info; } }