All Projects → dolyw → Shirojwt

dolyw / Shirojwt

Licence: mit
API SpringBoot + Shiro + Java-Jwt + Redis(Jedis)

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Shirojwt

Dokit
基于 Spring Boot2、 Jpa、 Spring Security、JWT、redis、Vue的前后端分离的后台管理系统开发平台, 用户管理、菜单管理、角色管理、字典管理、权限控制的方式为RBAC,操作日志、异常日志、接口限流、项目支持数据权限管理,支持一键生成前后端代码(支持在线预览及打包下载),支持前端菜单动态路由 可一键部署服务器应用,数据库。系统中活跃用户状态监控,监视当前系统CPU、内存、磁盘、堆栈等相关信息,基于Element UI在线表单设计及生成Vue代码。
Stars: ✭ 348 (-30.82%)
Mutual labels:  mysql, redis, spring-boot, jwt, element-ui
Spring Boot Plus
🔥 Spring-Boot-Plus is a easy-to-use, high-speed, high-efficient,feature-rich, open source spring boot scaffolding. 🚀
Stars: ✭ 2,198 (+336.98%)
Mutual labels:  redis, spring-boot, jwt, shiro
Xboot
基于Spring Boot 2.x的一站式前后端分离快速开发平台XBoot 微信小程序+Uniapp 前端:Vue+iView Admin 后端:Spring Boot 2.x/Spring Security/JWT/JPA+Mybatis-Plus/Redis/Elasticsearch/Activiti 分布式限流/同步锁/验证码/SnowFlake雪花算法ID 动态权限 数据权限 工作流 代码生成 定时任务 社交账号 短信登录 单点登录 OAuth2开放平台 客服机器人 数据大屏 暗黑模式
Stars: ✭ 3,432 (+582.31%)
Mutual labels:  mysql, redis, spring-boot, jwt
Cool Admin Midway
cool-admin(midway版)一个很酷的后台权限管理框架,模块化、插件化、CRUD极速开发,永久开源免费,基于midway.js 2.0、typeorm、mysql、jwt、element-ui等构建
Stars: ✭ 204 (-59.44%)
Mutual labels:  mysql, redis, jwt, element-ui
Eladmin
项目基于 Spring Boot 2.1.0 、 Jpa、 Spring Security、redis、Vue的前后端分离的后台管理系统,项目采用分模块开发方式, 权限控制采用 RBAC,支持数据字典与数据权限管理,支持一键生成前后端代码,支持动态路由
Stars: ✭ 16,943 (+3268.39%)
Mutual labels:  redis, spring-boot, jwt, element-ui
X Admin
致力于快速开发中小型后台管理系统项目模板(更新中......)
Stars: ✭ 123 (-75.55%)
Mutual labels:  mysql, redis, jwt, shiro
His
HIS英文全称 hospital information system(医院信息系统http://59.110.234.89:9999/swagger-ui.html ),医疗信息就诊系统,系统主要功能按照数据流量、流向及处理过程分为临床诊疗、药品管理、财务管理、患者管理。诊疗活动由各工作站配合完成,并将临床信息进行整理、处理、汇总、统计、分析等。本系统包括以下工作站:门诊医生工作站、药房医生工作站、医技医生工作站、收费员工作站、对帐员工作站、管理员工作站。需求为东软提供的云医院。
Stars: ✭ 359 (-28.63%)
Mutual labels:  redis, spring-boot, jwt, element-ui
Cookbook
🎉🎉🎉JAVA高级架构师技术栈==任何技能通过 “刻意练习” 都可以达到融会贯通的境界,就像烹饪一样,这里有一份JAVA开发技术手册,只需要增加自己练习的次数。🏃🏃🏃
Stars: ✭ 428 (-14.91%)
Mutual labels:  mysql, redis, spring-boot
Bcmall
以教学为目的的电商系统。包含ToB复杂业务、互联网高并发业务、缓存应用;DDD、微服务指导。模型驱动、数据驱动。了解大型服务进化路线,编码技巧、学习Linux,性能调优。Docker/k8s助力、监控、日志收集、中间件学习。前端技术、后端实践等。主要技术:SpringBoot+JPA+Mybatis-plus+Antd+Vue3。
Stars: ✭ 188 (-62.62%)
Mutual labels:  mysql, redis, jwt
Spring Boot Demo
Spring Boot & Spring Cloud & Spring Security Demo Case(Spring学习示例实战项目)
Stars: ✭ 255 (-49.3%)
Mutual labels:  mysql, redis, spring-boot
Roothub
使用 SSM 和 MySQL 开发的论坛系统
Stars: ✭ 131 (-73.96%)
Mutual labels:  mysql, redis, shiro
Springboot Learn
🌹springboot常用框架整合示例,涉及多种网站监控,数据缓存,网络通信,持久层,权限管理,常用工具等
Stars: ✭ 270 (-46.32%)
Mutual labels:  redis, jwt, shiro
Hope Boot
🌱 Hope-Boot 一款现代化的脚手架项目
Stars: ✭ 3,241 (+544.33%)
Mutual labels:  redis, spring-boot, shiro
Spring Reddit Clone
Reddit clone built using Spring Boot, Spring Security with JPA Authentication, Spring Data JPA with MySQL, Spring MVC. The frontend is built using Angular - You can find the frontend source code here - https://github.com/SaiUpadhyayula/angular-reddit-clone
Stars: ✭ 210 (-58.25%)
Mutual labels:  mysql, spring-boot, jwt
Netease Cloud Music Community
参照网易云音乐云村做的一个小程序社区,后端技术栈为Java,SpringBoot,MySQL,Redis,前端技术栈为uni-app。欢迎吐槽。
Stars: ✭ 157 (-68.79%)
Mutual labels:  mysql, redis, spring-boot
Dice
前后端分离Blog系统,采用Nuxt、Vue 2.x 和 SpringBoot 全家桶。
Stars: ✭ 222 (-55.86%)
Mutual labels:  mysql, redis, spring-boot
Meetingfilm
基于微服务架构的在线电影购票平台
Stars: ✭ 149 (-70.38%)
Mutual labels:  mysql, redis, spring-boot
Youlai Mall
youlai-mall 是基于Spring Boot 2.4、Spring Cloud 2020 & Alibaba、Vue、element-ui、uni-app快速构建的一套全栈开源商城平台,包括系统权限管理、微服务应用、微信小程序及APP应用
Stars: ✭ 331 (-34.19%)
Mutual labels:  spring-boot, jwt, element-ui
Projectoa
华理网院本科毕业设计 - 企业OA后台管理系统 基于springboot amazeui等
Stars: ✭ 110 (-78.13%)
Mutual labels:  mysql, redis, shiro
Spring Boot Demo
spring boot demo 是一个Spring Boot、Spring Cloud的项目示例,根据市场主流的后端技术,共集成了30+个demo,未来将持续更新。该项目包含helloworld(快速入门)、web(ssh项目快速搭建)、aop(切面编程)、data-redis(redis缓存)、quartz(集群任务实现)、shiro(权限管理)、oauth2(四种认证模式)、shign(接口参数防篡改重放)、encoder(用户密码设计)、actuator(服务监控)、cloud-config(配置中心)、cloud-gateway(服务网关)等模块
Stars: ✭ 323 (-35.79%)
Mutual labels:  redis, spring-boot, shiro

ShiroJwt

License PRs Welcome GitHub stars GitHub forks

前端地址:https://github.com/wang926454/VueStudy/tree/master/VueStudy08-JWT

疑问查看

  1. #14 重复请求会不会生成多个token
  2. #19 跨域sso问题
  3. #29 Token刷新并发处理

有疑问请扫码加QQ群交流: 779168604

项目相关

项目介绍

  1. RESTful API
  2. Maven集成Mybatis Generator(逆向工程)
  3. Shiro + Java-JWT实现无状态鉴权机制(Token)
  4. 密码加密(采用AES-128 + Base64的方式)
  5. 集成Redis(Jedis)
  6. 重写Shiro缓存机制(Redis)
  7. Redis中保存RefreshToken信息(做到JWT的可控性)
  8. 根据RefreshToken自动刷新AccessToken
关于Shiro + Java-JWT实现无状态鉴权机制(Token)
  1. 首先Post用户名与密码到user/login登入,成功返回加密的AccessToken,失败直接返回401错误(帐号或密码不正确)
  2. 以后访问都带上这个AccessToken即可
  3. 鉴权流程主要是重写了Shiro的入口过滤器JWTFilter(BasicHttpAuthenticationFilter),判断请求Header里面是否包含Authorization字段
  4. 有就进行ShiroToken登录认证授权(用户访问每一个需要权限的请求必须在Header中添加Authorization字段存放AccessToken),没有就以游客直接访问(有权限管控的话,以游客访问就会被拦截)
关于AES-128 + Base64当两个用户的明文密码相同时进行加密,会发现数据库中存在相同结构的暗文密码

大部分是以MD5 + 盐的形式解决了这个问题(详细自己百度),我采用AES-128 + Base64是以帐号+密码的形式进行加密密码,因为帐号具有唯一性,所以也不会出现相同结构的暗文密码这个问题

关于将Jedis工具类与SpringBoot整合

本来是直接将JedisUtil注入为Bean,每次使用直接@Autowired注入使用即可,但是在重写ShiroCustomCache无法注入JedisUtil,所以就改成静态注入JedisPool连接池JedisUtil工具类还是直接调用静态方法,无需@Autowired注入

关于Redis中保存RefreshToken信息(做到JWT的可控性)
  1. 登录认证通过后返回AccessToken信息(在AccessToken保存当前的时间戳和帐号)
  2. 同时在Redis中设置一条以帐号为Key,Value为当前时间戳(登录时间)RefreshToken
  3. 现在认证时必须AccessToken没失效以及Redis存在所对应的RefreshToken,且RefreshToken时间戳AccessToken信息中时间戳一致才算认证通过,这样可以做到JWT的可控性
  4. 如果重新登录获取了新的AccessToken,旧的AccessToken就认证不了,因为Redis中所存放的的RefreshToken时间戳信息只会和最新生成的AccessToken信息中携带的时间戳一致,这样每个用户就只能使用最新的AccessToken认证
  5. RedisRefreshToken也可以用来判断用户是否在线,如果删除Redis的某个RefreshToken,那这个RefreshToken所对应的AccessToken之后也无法通过认证了,就相当于控制了用户的登录,可以剔除用户
关于根据RefreshToken自动刷新AccessToken
  1. 本身AccessToken的过期时间为5分钟(配置文件可配置),RefreshToken过期时间为30分钟(配置文件可配置)
  2. 当登录后时间过了5分钟之后,当前AccessToken便会过期失效,再次带上AccessToken访问JWT会抛出TokenExpiredException异常说明Token过期
  3. 开始判断是否要进行AccessToken刷新Redis查询当前用户的RefreshToken是否存在以及这个RefreshToken所携带时间戳过期AccessToken所携带的时间戳是否一致
  4. 如果存在且一致就进行AccessToken刷新,设置过期时间为5分钟(配置文件可配置),时间戳为当前最新时间戳,同时也设置RefreshToken中的时间戳为当前最新时间戳,刷新过期时间重新为30分钟过期(配置文件可配置)
  5. 最终将刷新的AccessToken存放在Response的Header中的Authorization字段返回(前端进行获取替换,下次用新的AccessToken进行访问)

软件架构

  1. SpringBoot + Mybatis核心框架
  2. PageHelper插件 + 通用Mapper插件
  3. Shiro + Java-JWT无状态鉴权认证机制
  4. Redis(Jedis)缓存框架

安装教程

  1. 数据库帐号密码默认为root,如有修改,请自行修改配置文件application.yml
  2. 解压后执行src\main\resources\sql\MySQL.sql脚本创建数据库和表
  3. Redis需要自行安装Redis服务,端口密码默认
  4. SpringBoot直接启动即可,测试工具PostMan

使用说明

Mybatis Generator使用(可视化自定义模板快速生成基础代码:https://github.com/wang926454/ViewGenerator)

先配置src\main\resources\generator\generatorConfig.xml文件(默认配置都在原来包的下一级reverse包下),在pom.xml这一级目录(即项目根目录下)的命令行窗口执行(前提是配置了mvn)(IDEA可以直接在Maven窗口Plugins中双击执行)

mvn mybatis-generator:generate
PostMan使用(Token获取及使用)
先设置Content-Typeapplication/json

image text

然后填写请求参数帐号密码信息

image text

进行请求访问,请求访问成功

image text

点击查看Header信息的Authorization属性即是Token字段

image text

访问需要权限的请求将Token字段放在Header信息的Authorization属性访问即可

image text

Token的自动刷新也是在Token失效时返回新的TokenHeader信息的Authorization属性

搭建参考

  1. 感谢SmithCruise的Shiro+JWT+Spring Boot Restful简易教程:https://www.jianshu.com/p/f37f8c295057
  2. 感谢王洪玉的[Shiro入门](一)使用Redis作为缓存管理器:https://blog.csdn.net/why15732625998/article/details/78729254
  3. 感谢袋🐴饲养员的springboot(七).springboot整合jedis实现redis缓存:http://www.cnblogs.com/GodHeng/p/9301330.html
  4. 感谢W_Z_W_888的spring注入静态变量的三种方法及其注意事项:https://blog.csdn.net/W_Z_W_888/article/details/79979103
  5. 感谢天降风云的Vue2.0+ElementUI+PageHelper实现的表格分页:https://blog.csdn.net/u012907049/article/details/70237457
  6. 感谢yaxx的Vuejs之axios获取Http响应头:https://segmentfault.com/a/1190000009125333
  7. 感谢Twilight的解决使用jwt刷新token带来的问题:https://segmentfault.com/a/1190000013151506
  8. 感谢chuhx的shiro拦截器,返回json数据:https://blog.csdn.net/chuhx/article/details/51148877
  9. 感谢yidao620c的Shiro自带拦截器配置规则:https://github.com/yidao620c/SpringBootBucket/tree/master/springboot-jwt

参与贡献

  1. Fork 本项目
  2. 新建 Feat_xxx 分支
  3. 提交代码
  4. 新建 Pull Request
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].