1.创建SecurityManager
2.主体授权给SecurityManager
3.Authorizor来做授权
4.Realm从数据库或缓存中获取角色权限数据做比对
接上篇shiro认证基本流程
在Relam添加用户时,给用户一个角色
simpleAccountRealm.addAccount("Mark","123456","admin");//给用户赋予管理员角色
验证用户是否有这样的角色
subject.checkRole("admin");//检查用户是否具备这样的角色;若不存在这样的角色,会抛出主体不具备此角色的异常(Subject does not have role [admin])
subject.checkRoles("admin","user");//检查用户是否具备参数中所有的角色
源代码:
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.realm.SimpleAccountRealm;
import org.apache.shiro.subject.Subject;
import org.junit.Before;
import org.junit.Test;
/**
* 测试类
* 测试认证
*/
public class AuthenticationTest {
SimpleAccountRealm simpleAccountRealm = new SimpleAccountRealm();
@Before
public void addUser(){
simpleAccountRealm.addAccount("Mark","123456","admin");//给用户赋予管理员角色
}
@Test
public void testAuthentication(){
//1.构建SecurityManager环境
DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
defaultSecurityManager.setRealm(simpleAccountRealm);
//2.主体提交认证请求
SecurityUtils.setSecurityManager(defaultSecurityManager);//设置SecurityManager主体环境
Subject subject = SecurityUtils.getSubject();//获取主体
UsernamePasswordToken token = new UsernamePasswordToken("Mark","123456");//验证数据
subject.login(token);//提交验证数据
System.out.println("isAuthenticated:"+subject.isAuthenticated());
//验证成功,账号密码与Realm中的相同,返回true;若账号不同,抛出没有账号的异常;若密码不同抛出,验证失败的异常
subject.isAuthenticated();//是否认证
subject.checkRole("admin");//检查用户是否具备这样的角色;若不存在这样的角色,会抛出主体不具备此角色的异常(Subject does not have role [admin])
subject.checkRoles("admin","user");//检查用户是否具备参数中所有的角色
/* subject.logout();//登出
System.out.println("isAuthenticated:"+subject.isAuthenticated());//验证失败,返回false*/
}
}