# shiro **Repository Path**: chen_lxr/shiro ## Basic Information - **Project Name**: shiro - **Description**: springboot2.x 整合shiro 前后端分离 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2020-07-10 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 主要框架 ![SpringBoot version](https://img.shields.io/badge/SpringBoot-2.1.6.RELEASE-blue.svg)  ![Shiro-Spring version](https://img.shields.io/badge/shiro--spring-1.4.0-orange.svg)  ![druid version](https://img.shields.io/badge/druid-1.1.9-red.svg)  ![mybatis plus version](https://img.shields.io/badge/mybatis--plus-3.1.1-green.svg)  ![shiro-redis version](https://img.shields.io/badge/shiro--redis-3.1.0-yellow.svg)  ## Shiro架构图与基本知识 1、Shiro是Apache下的一个开源项目,我们称之为Apache Shiro。它是一个很易用与Java项目的的安全框架,提供了认证、授权、加密、会话管理,与spring Security 一样都是做一个权限的安全框架,但是与Spring Security 相比,在于 Shiro 使用了比较简单易懂易于使用的授权方式。shiro属于轻量级框架,相对于security简单的多,也没有security那么复杂。所以我这里也是简单介绍一下shiro的使用。 2、非常简单;其基本功能点如下图所示: ![在这里插入图片描述](https://atts.w3cschool.cn/attachments/image/wk/shiro/1.png) **Authentication**:身份认证/登录,验证用户是不是拥有相应的身份; **Authorization**:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限; **Session Manager**:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通JavaSE环境的,也可以是如Web环境的; **Cryptography**:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储; **Web Support**:Web支持,可以非常容易的集成到Web环境; Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率; **Concurrency**:shiro支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去; Testing:提供测试支持; **Run As**:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问; **Remember Me**:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。 **记住一点,Shiro不会去维护用户、维护权限;这些需要我们自己去设计/提供;然后通过相应的接口注入给Shiro即可。** ## 源码地址 https://gitee.com/awyoo/shiro/tree/master ## 数据库结构 5张表,也就是现在流行的权限设计模型[RBAC](https://baike.baidu.com/item/RBAC/1328788?fr=aladdin),建表SQL已放在项目中。 ## 项目结构 下面是整个项目结构,主要类已做注释。 ``` ├─main │ ├─java │ │ └─com │ │ └─luobo │ │ └─shiro │ │ │ SpringBootShiroApplication.java │ │ │ │ │ ├─bean │ │ │ CacheUser.java --- 缓存用户信息 │ │ │ Result.java --- 统一返回结果 │ │ │ │ │ ├─config │ │ │ DruidMonitorConfig.java --- Druid监控配置 │ │ │ MyBatisPlusConfig.java --- MyBatisPlus配置 │ │ │ MySessionIdGenerator --- sessionId配置 │ │ │ MySessionManager.java --- 自定义session管理 │ │ │ MyShiroRealm.java --- 自定义 shiroRealm, 主要是重写其认证、授权 │ │ │ SessionControlFilter.java --- 自定义session过滤器 │ │ │ ShiroConfig.java --- Shiro管理 │ │ │ ShiroSessionListener.java --- 自定义session监听器 │ │ │ │ │ ├─controller │ │ │ LoginController.java │ │ │ UserController.java │ │ │ │ │ ├─domain │ │ │ ├─entity │ │ │ │ Permission.java │ │ │ │ Role.java │ │ │ │ RolePermission.java │ │ │ │ User.java │ │ │ │ UserRole.java │ │ │ │ │ │ │ └─mapper │ │ │ PermissionMapper.java │ │ │ RoleMapper.java │ │ │ RolePermissionMapper.java │ │ │ UserMapper.java │ │ │ UserRoleMapper.java │ │ │ │ │ ├─service │ │ │ │ IPermissionService.java │ │ │ │ IRolePermissionService.java │ │ │ │ IRoleService.java │ │ │ │ IUserRoleService.java │ │ │ │ IUserService.java │ │ │ │ │ │ │ └─impl │ │ │ PermissionServiceImpl.java │ │ │ RolePermissionServiceImpl.java │ │ │ RoleServiceImpl.java │ │ │ UserRoleServiceImpl.java │ │ │ UserServiceImpl.java │ │ │ │ │ ├─util │ │ │ IPUtil.java ---获取ip 工具类 │ │ │ JWTUtil.java ---JWT 加解密 │ │ │ │ │ └─web │ │ │ GlobalExceptionHand.java --- 全局异常处理 │ │ │ │ │ └─exception │ │ LoginException.java │ │ │ └─resources │ │ application.yml │ │ application-dev.yml │ │ │ ├─mappers │ │ PermissionMapper.xml │ │ RoleMapper.xml │ │ RolePermissionMapper.xml │ │ UserMapper.xml │ │ UserRoleMapper.xml │ │ │ ├─sql │ │ shiro-V1.0.1.sql --- sql脚本 │ │ │ ├─static │ └─templates └─test ``` ## 实现功能 1.前后端分离权限管理
2.Shiro使用redis作为缓存
3.密码加盐处理
4.token防盗用
5.在线人数统计
6.控制并发登录
## 待实现功能 1.只能控制并发登录不能限制并发登录数量 待优化: 优化出可配置型并发登录个数