shiro的核心组件主要有:
Authentication(认证):用户身份识别,通常被称为用户“登录”
Authorization(授权):访问控制。比如某个用户是否具有某个操作的使用权限。
Session Management(会话管理):特定于用户的会话管理,用以代替web项目中的HttpSession对象。
PS:所以在搭建shiro环境时,配置以上3大组件是关键。
首先我们先通过一个原生的基本的java案例来了解下shiro执行过程
1.创建一个maven的java项目,引入相关的依赖
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.3.2</version>
</dependency>
2.在resources中创建shiro.ini文件,该文件用来配置存储用户的账户信息、角色、权限等
#配置用户和角色信息
[users]
#格式是:用户名=密码,角色名(角色可选)
zhang=123,admin
wang=123
admin=123,normal,admin,vip
#配置角色
[roles]
#格式是:角色名=权限名1,权限名2
admin=user,menu
normal=ua
vip=delvip
vip2=delvip2
3.在测试类中编写代码测试
//1.获取安全管理器
IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro.ini");
SecurityManager securityManager = factory.getInstance();
//2.需要设置安全管理器
SecurityUtils.setSecurityManager(securityManager);
//3.获取Subject对象,即将登陆的用户
Subject subject = SecurityUtils.getSubject();
Session session = subject.getSession();
/*测试session
session.setAttribute("name","admin");
System.out.println(session.getAttribute("name"));*/
//表示没有验证
if (subject.isAuthenticated()==false){
//通过UsernamePasswordToken来封装用户名密码,使用ini中存在的用户
UsernamePasswordToken token = new UsernamePasswordToken("admin","123");
token.setRememberMe(true);//是否记住
try {
subject.login(token);//登录
} catch (UnknownAccountException e) {
System.err.println("账户不存在");
}catch (IncorrectCredentialsException e) {
System.err.println("密码错误");
}catch (LockedAccountException e) {
System.err.println("账户已被锁");
}
}
//是否拥有指定的角色
if(subject.hasRole("admin")){
System.out.println("拥有admin角色");
}else{
System.err.println("不是该角色");
}
//是否拥有制定的权限
if (subject.isPermitted("delvip")){
System.out.println("拥有该权限");
}else{
System.err.println("没有该权限");
}
//退出登录
subject.logout();
ok,到此为止我们了解了一下一个简单的shiro的执行流程。