spring security 及 JWT 入门
原文的作者写的很好,推荐前往阅读,本片记录纯粹是为了方便自己之后复习的时候使用观看
一、概念
1.1 Session、Cookie与Token的区别
1.1.1 为什么会有Session,Cookie和Token
http本身无状态,就是不保存任何用户信息。什么是无状态呢?就是说这一次请求和上一次请求是没有任何关系的,互不认识的,没有关联的。
1.1.2 Session
客户端请求服务端,服务端会为这次请求开辟一块内存空间,这个对象便是 Session 对象,存储结构为 ConcurrentHashMap。Session 弥补了 HTTP 无状态特性,服务器可以利用 Session 存储客户端在同一个会话期间的一些操作记录。
Session 的缺点
Session 机制有个缺点,比如 A 服务器存储了 Session,就是做了负载均衡后,假如一段时间内 A 的访问量激增,会转发到 B 进行访问,但是 B 服务器并没有存储 A 的 Session,会导致 Session 的失效。
1.1.3 Cookie
HTTP 协议中的 Cookie 包括 Web Cookie 和浏览器 Cookie,它是服务器发送到 Web 浏览器的一小块数据。服务器发送到浏览器的 Cookie,浏览器会进行存储,并与下一个请求一起发送到服务器。通常,它用于判断两个请求是否来自于同一个浏览器,例如用户保持登录状态。
HTTP Cookie 机制是 HTTP 协议无状态的一种补充和改良
原文地址:www.jianshu.com/p/dcdb57b2e…
1.1.4 Token
token就是一种身份验证方法,和cookie有相似作用;它被很多人翻译过来后生动的称为“令牌”,它的扩展性,安全性更高,非常适合用在Web应用和移动开发应用上。
1.1.5 区别:
原文地址:www.bbsxiaomi.com/essay/skill…
1.2 JWT
1.2.1 什么是JWT
Json Web Token是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准(RFC 7519) 该token被设计为紧凑且安全的 特别适用于分布式站点的单点登录(SSO)场景。
JWT实际上就是一个字符串 它由三部分组成:头部 载荷和签名 用[.]分隔这三个部分 最终的格式类似于:xxxx.xxxx.xxxx
1.2.2 JWT校验过程
(图片来源:blog.csdn.net/weixin_4419…)
1.3 Spring Security
1.3.1 Spring Security是什么
SpringSecurity属于Spring家族中的一款安全管理框架,它提供了一套Web应用安全性的完整解决方案。主要的功能是认证和授权。
认证 :验证当前访问系统的是不是本系统的用户,并且要确定具体是哪个用户。 授权 :经过认证后判断当前用户是否有权限进行某个操作。
1.3.2 原理分析
SpringSecurity 采用的是责任链的设计模式,它有一条很长的过滤器链。
原文地址:blog.csdn.net/u012702547/…
1.3.3 默认登录流程
(图片来源:blog.csdn.net/weixin_4419…)
二、SpringBoot整合Spring Security和JWT
2.1 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-jwt</artifactId>
<version>1.0.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-core</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>org.example</groupId>
<artifactId>common_api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--hutool工具-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.5.7</version>
</dependency>
<!--可以理解为用来将配置文件中的属性使用到项目中,可以不用,使用@Value或@ConfigurationProperties注解也可以,其他功能有待发掘-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
未完