我是靠谱客的博主 忐忑裙子,最近开发中收集的这篇文章主要介绍2021-11-22最适合入门的Shiro框架教程(一)(权限管理,核心组件,认证流程,基于JavaSE应用)一、引入案例《汽车销售管理系统》二、RBAC权限设计(五张表) 三、Shiro安全框架简介 四、Shiro的工作原理 五、基于JavaSE应用-shiro的基本使用六、shiro认证授权流程,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
一、引入案例《汽车销售管理系统》
基于主页的权限管理(不同用户)
适用于权限管理比较单一,用户少,每类用户权限固定
基于用户和权限的权限管理
可以实现权限的动态分配,但是不够灵活,不适合多个重复角色,
用户表--》用户权限表--》系统权限表(基础三张表 )
二、RBAC权限设计(五张表)
基于角色的访问控制(Role-Based Access Control)
角色表
角色ID | 角色名称 |
r001 | 销售人员 |
r002 | 仓管人员 |
用户角色表
用户ID | 角色ID |
1 | r001 |
2 | r002 |
用户权限表,可以通过权限直接授予,不想通过角色授予!!
三、Shiro安全框架简介
3.1认证授权流程
认证:对用户的身份进行检查
授权:对用户的权限进行检查
3.2安全框架
帮助我们完成用户身份认证及权限检查功能框架
常用框架:
- Shiro:Apache Shiro 强大的java安全框架,可以完成认证,授权,密码及会话管理,主要针对单体项目的权限管理
- Spring Security:基于Spring的一个安全框架,依赖Spring
- OAuth2:第三方授权登录
- 自定义安全认证中心
四、Shiro的工作原理
4.1Shiro的核心功能
4.2Shiro的核心组件
Architecture
-
Subject 当前待认证和授权的用户对象
-
Security Manager 通过Security Manager来进行内部实例的管理,并通过它来提供安全管理的各种服务。
-
Realms 相当于Shiro进行认证和授权的数据源,充当了Shiro与安全数据之间的桥梁或者连接器,也就是说,当对用户进行认证和授权验证时,Shiro会用应用配置的realm中查找用户以及权限信息。
五、基于JavaSE应用-shiro的基本使用
5.1创建Maven项目
5.2导入Shiro依赖库
<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.4.1</version> </dependency>
5.3创建Shiro配置文件
创建shiro.inl文件,完成用户、角色以及权限的配置
[user] zhangsan=123456,seller lisi=666666,ckmgr admin=222222,admin [roles] admin=* seller=order-add,order-del,order-list ckmgr=ck-add,ck-del,ck-list
5.4shiro基本使用
package com.qfedu.shiro;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.realm.text.IniRealm;
import org.apache.shiro.subject.Subject;
import java.util.Scanner;
public class TestShiro {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("请输入账号");
String username = scanner.nextLine();
System.out.println("请输入密码");
String password= scanner.nextLine();
//创建安全管理器
DefaultSecurityManager securityManager=new DefaultSecurityManager();
//构造realm
IniRealm iniRealm=new IniRealm("classpath:shiro.ini");
//将realm设置给安全管理器
securityManager.setRealm(iniRealm);
//将安全管理器设置给SecurityUtils工作
SecurityUtils.setSecurityManager(securityManager);
Subject subject = SecurityUtils.getSubject();
//认证流程
//a.将认证账号和密码封装到token对象中
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
//b.通过subject对象调用login方法进行认证申请
boolean b=false;
try {
subject.login(token);
b=true;
}catch (IncorrectCredentialsException e){
b=false;
}
System.out.println(b?"登录成功":"登录失败");
//授权流程!!!
//判断是否有角色
System.out.println(subject.hasRole("seller"));
//判断是否有权限
System.out.println(subject.isPermitted("order-del"));
}
}
六、shiro认证授权流程
账号和密码封装到Token中。
subject会调用login方法,需要token!!
SecurityManager——Authenticator(认证器)——iniRealm<<===shiro.ini安全信息
- 通过subject.login(token)进行登录,就会将token包含的用户信息(账号和密码)传递给安全管理器
- 安全管理器调用Authenticator认证器进行身份认证
- Authenticator把token传递给对应的Realm
- Realm根据得到的token,调用doGetAuthenticationInfo方法进行认证(如果认证失败通过抛出异常提示认证器)
- 第五到第七步将校验结果一层一层返回!
不正确的凭证 IncorrectCredentialsException
最后
以上就是忐忑裙子为你收集整理的2021-11-22最适合入门的Shiro框架教程(一)(权限管理,核心组件,认证流程,基于JavaSE应用)一、引入案例《汽车销售管理系统》二、RBAC权限设计(五张表) 三、Shiro安全框架简介 四、Shiro的工作原理 五、基于JavaSE应用-shiro的基本使用六、shiro认证授权流程的全部内容,希望文章能够帮你解决2021-11-22最适合入门的Shiro框架教程(一)(权限管理,核心组件,认证流程,基于JavaSE应用)一、引入案例《汽车销售管理系统》二、RBAC权限设计(五张表) 三、Shiro安全框架简介 四、Shiro的工作原理 五、基于JavaSE应用-shiro的基本使用六、shiro认证授权流程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复