{"repo":"Smith-Cruise/Spring-Boot-Shiro","free":true,"listed":false,"github":"https://github.com/Smith-Cruise/Spring-Boot-Shiro","clone":"git clone https://github.com/Smith-Cruise/Spring-Boot-Shiro.git","description":"Shiro基于SpringBoot +JWT搭建简单的restful服务","language":"Java","stars":1637,"topics":["springboot","shiro","jwt","java","restful"],"license":null,"category":"auth-billing-email","readme_excerpt":"Shiro + JWT + Spring Boot Restful 简易教程 GitHub 项目地址：https://github.com/Smith-Cruise/Spring-Boot-Shiro 。 序言 我也是半路出家的人，如果大家有什么好的意见或批评，请务必 issue 下。 如果想要直接体验，直接 clone 项目，运行 mvn spring-boot:run 命令即可进行访问。网址规则自行看教程后面。 如果想了解 Spring Security 可以看 Spring Boot 2.0+Srping Security+Thymeleaf的简易教程 Spring Boot 2 + Spring Security 5 + JWT 的单页应用Restful解决方案 （推荐） 特性 完全使用了 Shiro 的注解配置，保持高度的灵活性。 放弃 Cookie ，Session ，使用JWT进行鉴权，完全实现无状态鉴权。 JWT 密钥支持过期时间。 对跨域提供支持。 准备工作 在开始本教程之前，请保证已经熟悉以下几点。 - Spring Boot 基本语法，至少要懂得 Controller 、 RestController 、 Autowired 等这些基本注释。其实看看官方的 Getting-Start 教程就差不多了。 - JWT （Json Web Token）的基本概念，并且会简单操作JWT的 JAVA SDK。 - Shiro 的基本操作，看下官方的 10 Minute Tutorial 即可。 - 模拟 HTTP 请求工具，我使用的是 PostMan。 简要的说明下我们为什么要用 JWT ，因为我们要实现完全的前后端分离，所以不可能使用 session ， cookie 的方式进行鉴权，所以 JWT 就被派上了用场，你可以通过一个加密密钥来进行前后端的鉴权。 程序逻辑 1. 我们 POST 用户名与密码到 /login 进行登入，如果成功返回一个加密 token，失败的话直接返回 401 错误。 2. 之后用户访问每一个需要权限的网址请求必须在 header 中添加 Authorization 字段，例如 Authorization: token ， token 为密钥。 3. 后台会进行 token 的校验，如果有误会直接返回 401。 Token加密说明 - 携带了 username 信息在 token 中。 - 设定了过期时间。 - 使用用户登入密码对 token 进行加密。 Token校验流程 1. 获得 token 中携带的 username 信息。 2. 进入数据库搜索这个用户，得到他的密码。 3. 使用用户的密码来检验 token 是否正确。 准备Maven文件 新建一个 Maven 工程，添加相关的 dependencies。 注意指定JDK版本和编码。 构建简易的数据源 为了缩减教程的代码，我使用 HashMap 本地模拟了一个数据库，结构如下： username password role permission -------- -------- ----- ---------- smith smith123 user view danny danny123 admin view,edit 这是一个最简单的用户权限表，如果想更加进一步了解，自行百度 RBAC。 之后再构建一个 UserService 来模拟数据库查询，并且把结果放到 UserBean 之中。 UserService.java UserBean.ja","default_branch":null,"files":null,"tree":[],"storefront":"/r/Smith-Cruise","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/Smith-Cruise/Spring-Boot-Shiro/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}