mirror of
https://github.com/201206030/novel-plus.git
synced 2025-06-12 08:38:31 +00:00
93 lines
3.4 KiB
Java
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;
|
|
}
|
|
|
|
}
|