# 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
## 主要框架





## Shiro架构图与基本知识
1、Shiro是Apache下的一个开源项目,我们称之为Apache Shiro。它是一个很易用与Java项目的的安全框架,提供了认证、授权、加密、会话管理,与spring Security 一样都是做一个权限的安全框架,但是与Spring Security 相比,在于 Shiro 使用了比较简单易懂易于使用的授权方式。shiro属于轻量级框架,相对于security简单的多,也没有security那么复杂。所以我这里也是简单介绍一下shiro的使用。
2、非常简单;其基本功能点如下图所示:

**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.只能控制并发登录不能限制并发登录数量
待优化: 优化出可配置型并发登录个数