package com.yd.sinjutech.shiro;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
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.mgt.DefaultSecurityManager;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.realm.Realm;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import com.yd.sinjutech.entity.AgentLogin;
import com.yd.sinjutech.entity.Login;
import com.yd.sinjutech.entity.Role;
import com.yd.sinjutech.entity.User;
import com.yd.sinjutech.service.LoginService;
public class UserRealm extends AuthorizingRealm {
@Autowired
private LoginService loginService;
private Login dblogin = new Login();
private AgentLogin dbAgentLogin = new AgentLogin();
/**
* 授权逻辑
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
String userName = (String) principals.getPrimaryPrincipal();// 获取用户名
/**
* 根据用户名从数据库查询出权限 在设置进角色的集合和权限的集合
*/
// 角色的集合
Set roles = new HashSet();
roles.add(userName);
// 权限的集合
Set permissions = new HashSet();
/**
* 权限 角色添加进权限验证
*/
if (dblogin.getId() != 0) {
Role userRole = dblogin.getUser().getRole();
roles.add(userRole.getRole());
System.out.println("------" + userRole);
for (String url : loginService.getUrls(userRole.getId())) {
permissions.add(url);
}
}
System.out.println("url--" + permissions);
System.out.println("角色+++" + roles);
SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();// 授权
authorizationInfo.addRoles(roles);// 设置角色
authorizationInfo.addStringPermissions(permissions);// 设置权限
return authorizationInfo;
}
/**
* 登录逻辑
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
/**
* 自定义登录实现
*/
CustomizedToken customizedToken = (CustomizedToken) token;
String userName = (String) customizedToken.getPrincipal();// 根据userName查询登录数据库
//securityManager:安全管理器
SecurityManager securityManager= new DefaultSecurityManager();
//SecurityUtils:全局的安全工具
SecurityUtils.setSecurityManager(securityManager);
Login login = new Login();
login.setLogin(userName);
/**
* 登录获取用户数据
*/
dblogin = loginService.login(login);
/**
* 判断账号是否存在
*/
if (dblogin == null || dbAgentLogin == null) {
throw new UnknownAccountException();
}
/**
* 交给AuthenticatingRealm使用CredentialsMatcher进行密码匹配,如果觉得人家的不好可以在此判断或自定义实现
*/
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(userName, dblogin.getPassword(), getName());// 用户名和密码//验证
return info;
}
}
一键复制
编辑
Web IDE
原始数据
按行查看
历史