shiro是用来进行登录验证,权限校验的安全框架
1.参考视频:传送门 2.准备条件:eclipse编译器
3.redis数据库,MYSQL数据库
4.md文件打开工具:传送门

5.参考demo:传送门(见本人资源),先在数据库里创建数据,条填充表,注册页面可以注册用户。

Shiro笔记整理

一、基本概念

Shiro是一个权限管理框架,包括用户身份认证授权两部分

二、基本实现逻辑

其基本的逻辑构图如下:

面试题 为什么使用redis shiro为什么要使用redis_面试题 为什么使用redis


核心是安全管理器securityManager,realm中主要有认证和授权两大模块,其基本的思路如下:

一般我们会把shiro结合拦截器来做,shiro有封装好的拦截器,将拦截器,安全管理器,realm注入到sprig容器后,同时也会存储到安全管理工具SecurityUtils中,

当登录的时候,我们会执行工具类中的subject中的login方法,这样就会到realm中的认证方法中,在认证token中,取出用户名,结合数据库,验证用户名后,并给shiro返回密码,盐值等由shiro框架自行完成密码的校验,如果通过就会跳转到主页面,不通过就会报错UnknownAccountException和IncorrectCredentialsException,返回到登录页面。

关于盐值的比对问题,注册的时候会存到数据库里面随机盐,然后登录验证的时候,会将随机盐一起发回给shiro框架,结合散列来验证。

关于授权的问题,我们用·的是shiro标签,当然也可以使用注解和代码的形式,

注解:@RequiresRoles、@RequiresPermissions代码的话还是用的是SecurityUtils里面subject方法的hasRole等方法,这三种情况都会直接响应realm里面的授权方法,参数中取出主身份信息结合数据库完成授权,并将相应的权限信息返回给shiro框架,然后再反应在相应的标签,注解,代码上

图片验证码的话会存在session中,通过前端的获取和后端的比对完成验证。

当然这是第一次认证和授权,我们使用的是redis存储,在第一次完成之后,就会把相应的信息存到redis中,就会到realm中配置的RedisCacheManager进行数据的读取,redis存储的话会涉及到很多序列化的操作,因为redis是内存数据库,所以序列化的目的是将数据转化为二进制方便内存和磁盘的交互。 Redis常用的命令:keys *查看数据库中的键值对,flushAll清除所有的键值对。

三、关于数据库表的设计
数据库一共有三个基本表,两个关系表,基本表分别是用户、角色、权限表,关系表分别是:用户对角色表,角色对权限表,不同的用户有不同的角色,不同的角色会拥有不同的权限,当一个用户进入到系统中时,会先进入用户表进行认证,认证之后就会查询相关的角色和权限,来完成认证。