# Secuirty **Repository Path**: zf233cn/secuirty ## Basic Information - **Project Name**: Secuirty - **Description**: SpringBoot+Shiro+jwt+Redis 整合(学习记录) - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-07-12 - **Last Updated**: 2021-07-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: JWT, Redis, Shiro, SpringBoot ## README # 前后端分离应用整合JWT-初探 *** ### 项目结构如下 - security-jwt(探索)不做介绍 - security-jwt-shiro(整合 Spring Boot + Shiro + JWT + Redis) - spring-boot-security-jwt(整合 Spring Boot + Spring Security + JWT) ### security-jwt-shiro 简介 此 demo 使用 JWT Token 结合权限框架 Shiro 进行全局身份验证、鉴权。 账号密码、社交、验证码登陆只负责用户身份信息校验且不参与授权,登陆成功后生成 Token 返回。 自定义的 JwtFilter 根据 ShiroConfig 中配置的策略规则及接口上权限注解所定义的策略规则,配合 JwtRealm,进行全局接口的身份验证和权限授予。 禁用 Shiro 的 Session 机制,因为不需要保持 JWT 的状态 #### 存在的问题 * 用户修改个人敏感信息(比如密码)后的 Token 处理,目前考虑 增加 Redis 黑名单 * …… ### spring-boot-security-jwt 简介 此 demo 使用 JWT Token 结合权限框架 Spring Security 进行全局身份验证、鉴权。 账号密码、社交、验证码登陆只负责用户身份信息校验且不参与授权 登陆成功后生成 Token 返回,自定义的过滤器有四个: * openLoginFilter、SmsLoginFilter、UPwdLoginFilter、JwtAuthenticationTokenFilter 其中 JwtAuthenticationTokenFilter 负责过滤所有请求中请求头所携带的 Token 是否合法,不论合法与否均放行,不同之处如下: * 合法的情况下会结合 jwtDetailsService 进行用户信息加载和权限授予以及Token 即将过期的延期操作(可以尝试结合 Redis 实现。此功能未做) 不用担心 "不论合法与否均放行" 这个操作。不满足条件仍访问保护资源(Security 配置类中所配置的需要权限的 URI 以及标注权限注解的控制器接口)的请求被放行后,框架会自动匹配并且进行身份或权限认证 #### 其他类说明 * TestVCodePool 模拟的一个短信发送类,可以使用 SMS 配合 Redis 实现 * MyRedisCacheManager 自定义 shiro 缓存实现,这里直接使用 spring-data-redis 进行整合 #### 测试注意 * MySQL 数据库运行 security.sql 脚本,application.yml 配置 MySQL 及 Redis * 建议使用 PostMan 进行接口调试 * 请求角色或权限保护的接口需要将 Token 填充至 Header 中 Authorization 中后进行访问 #### 写在最后 * 技术不是很好,多谢指导 * 在网上找了很多 Spring Boot + Shiro / Spring Security + JWT + 多方式验证的 demo ,并没有找到一个简单明了易于我学习理解的,所以才有了这个仓库 * 两个整合的 demo 的角色权限授予或者说整个 demo 的设计,可能存在不合理,不安全。但在接口测试中倒是没有出现过越权、权限授予失败、开放端口无法访问、登陆失败等问题。