93 lines
3.4 KiB
Java

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<String> 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<String, Object> 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<DataPermDO> dataPerms = dataPermDao.selectDataPermsByUserId(user.getUserId());
Map<String, List<DataPermDO>> permsMap = new HashMap<>();
for (DataPermDO perm : dataPerms) {
String key = perm.getTableName();
List<DataPermDO> 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;
}
}