Spring Boot 整合 Shiro
1. Shiro 简介
- Apache Shiro 是一个强大的简单易用的 Java 安全框架,主要用来更便捷的认证、授权、加密、会话管理、与 Web 集成、缓存等;
- Shiro 使用起来小而简单;
- Shiro 依赖性低,不需要任何框架和容器,Shiro 不仅可以实现 Web 应用的权限管理,还可以实现 C/S 系统,分布式系统权限管理;
- Shiro 属于轻量框架。
2. Shiro 核心功能
1. 主要功能
Shiro 主要有三大功能模块:
- Subject:主体,代表了当前 “用户”;
- SecurityManager:安全管理器,管理所有 Subject,所有与安全有关的操作都会与 SecurityManager 交互,可以配合内部安全组件(类似于 SpringMVC 中的 DispatcherServlet);
- Realms:用于进行权限信息的验证,Shiro 从从 Realm 获取安全数据,可以把 Realm 看成 DataSource,即安全数据源,一般需要自己实现。
2. 细分功能
- Authentication:身份认证/登录,即账号密码验证,验证用户是不是拥有相应的身份;
- Authorization:授权,即角色或者权限验证,验证某个已认证的用户是否拥有某个权限;
- Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;
- Cryptography:加密,保护数据的安全性,如密码加密等;
- Web Support:Web 支持,可以非常容易的集成到 Web 环境;
- Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率;
- Concurrency:Shiro 支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去;
- Testing:提供测试支持;
- Run As:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;
- Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。
3. Spring Boot 整合 Shiro 流程
-
导入依赖
<!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-spring-boot-web-starter --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring-boot-web-starter</artifactId> <version>1.7.0</version> </dependency>
-
实体类
使用 Lombok 来简化开发
/** * @author beastars */ @Data @AllArgsConstructor @NoArgsConstructor public class User { private int id; private String name; private String pwd; private String perms; }
-
根据用户名查询数据库
此处使用 Mybatis-plus 来帮助查询
使用 Mybatis-plus 需要在启动类上添加
@MapperScan("com.lzq.mapper")
的注解,来扫描 Mapper 类UserMapper:
/** * @author beastars */ public interface UserMapper extends BaseMapper<User> { }
UserService:
/** * @author beastars */ @Service public class