Spring boot-手把手教你使用Token

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring boot-手把手教你使用Token相关的知识,希望对你有一定的参考价值。

参考技术A

JWT由三部分组成,由类型和加密算法的head(头部),包含公共信息和自定义信息的playboard(负载),以及signature(签名)组成。

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9 就是头部信息,这是由base64加密后的密文,base64是一种对称加密算法,解密后的json格式如下。头部信息由type(类型)和 alg(加密算法)组成。类型就是"JWT",加密算法一般使用 HMAC SHA256加密算法。

eyJhdWQiOiIzOTU4MTU4MDEiLCJleHAiOjE2MDYxMDc5NTEsImlhdCI6MTYwNjEwMDc1MX0 就是负载信息,加密后的json格式如下。负载信息一般由标准申明,公共声明,私有声明组成。

iss: jwt签发者
sub: jwt所面向的用户
aud: 接收jwt的一方
exp: jwt的过期时间,这个过期时间必须要大于签发时间
nbf: 定义在什么时间之前,该jwt都是不可用的.
iat: jwt的签发时间
jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。

公共的声明和私有的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息。但不建议添加敏感信息,因为该部分在客户端可解密。

第三部分签名是由base64加密后的头部信息和负载信息以及secret组成的签名,签名算法是有头部信息定以的加密算法,一般是HMAC SHA256。然后头部,负载,签名三部分组成了token。

pom.xml引入依赖

新增controller,提供token接口

CallbackService 生成token

返回的示例如下

定义自定义注解,在需要token校验的方法上加上即可

新增AuthenticationInterceptor对第三方请求进行拦截,实现HandlerInterceptor接口

注册AuthenticationInterceptor拦截器,对指定请求路径进行拦截

在此文中,我们大致了解了Token的定义,获取,校验等方法。此外,Token 的无状态,可扩展性,多平台跨域等特性,也让Token广泛应用在安全校验领域中。在接下来的几篇文章中,我将介绍如何使用Spring AOP进行加密,解密,验签等操作。

参考:
https://www.jianshu.com/p/576dbf44b2ae

手把手教你 Spring Boot 整合 Spring Data Jpa

自从 Spring Boot 火起来之后,Jpa/Hibernate 这一套技术栈好像使用的人也慢慢变多了,不过还是有一些小伙伴不太清楚这里边的一些概念和具体用法,因此松哥今天就通过一篇短文+视频实战来向大家做个介绍。

1. Jpa

1.1 JPA 是什么

  1. Java Persistence API:用于对象持久化的 API
  2. Java EE 5.0 平台标准的 ORM 规范,使得应用程序以统一的方式访问持久层

1.2 JPA 和 Hibernate 的关系

  1. JPA 是 Hibernate 的一个抽象(就像 JDBC 和 JDBC 驱动的关系);
  2. JPA 是规范:JPA 本质上就是一种 ORM 规范,不是 ORM 框架,这是因为 JPA 并未提供 ORM 实现,它只是制订了一些规范,提供了一些编程的 API 接口,但具体实现则由 ORM 厂商提供实现;
  3. Hibernate 是实现:Hibernate 除了作为 ORM 框架之外,它也是一种 JPA 实现
  4. 从功能上来说, JPA 是 Hibernate 功能的一个子集

1.3 JPA 的供应商

JPA 的目标之一是制定一个可以由很多供应商实现的 API,Hibernate 3.2+、TopLink 10.1+ 以及 OpenJPA 都提供了 JPA 的实现,Jpa 供应商有很多,常见的有如下四种:

  1. Hibernate:JPA 的始作俑者就是 Hibernate 的作者,Hibernate 从 3.2 开始兼容 JPA。
  2. OpenJPA:OpenJPA 是 Apache 组织提供的开源项目。
  3. TopLink:TopLink 以前需要收费,如今开源了。
  4. EclipseLink

1.4 JPA 的优势

  1. 标准化: 提供相同的 API,这保证了基于 JPA 开发的企业应用能够经过少量的修改就能够在不同的 JPA 框架下运行。
  2. 简单易用,集成方便: JPA 的主要目标之一就是提供更加简单的编程模型,在 JPA 框架下创建实体和创建 Java 类一样简单,只需要使用 javax.persistence.Entity 进行注解;JPA 的框架和接口也都非常简单。
  3. 可媲美JDBC的查询能力: JPA的查询语言是面向对象的,JPA 定义了独特的JPQL,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。
  4. 支持面向对象的高级特性: JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,最大限度的使用面向对象的模型

1.5 JPA 包含的技术

  1. ORM 映射元数据:JPA 支持 XML 和 JDK 5.0 注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。
  2. JPA 的 API:用来操作实体对象,执行CRUD操作,框架在后台完成所有的事情,开发者从繁琐的 JDBC 和 SQL 代码中解脱出来。
  3. 查询语言(JPQL):这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序和具体的 SQL 紧密耦合。

2. Spring Data

Spring Data 是 Spring 的一个子项目。用于简化数据库访问,支持NoSQL 和 关系数据存储。其主要目标是使数据库的访问变得方便快捷。Spring Data 具有如下特点:

  • SpringData 项目支持 NoSQL 存储:
    1. MongoDB (文档数据库)
    2. Neo4j(图形数据库)
    3. Redis(键/值存储)
    4. Hbase(列族数据库)
  • SpringData 项目所支持的关系数据存储技术:
    1. JDBC
    2. JPA
  • Spring Data Jpa 致力于减少数据访问层 (DAO) 的开发量. 开发者唯一要做的,就是声明持久层的接口,其他都交给 Spring Data JPA 来帮你完成
  • 框架怎么可能代替开发者实现业务逻辑呢?比如:当有一个  UserDao.findUserById() 这样一个方法声明,大致应该能判断出这是根据给定条件的 ID 查询出满足条件的 User 对象。Spring Data JPA 做的便是规范方法的名字,根据符合规范的名字来确定方法需要实现什么样的逻辑。

关于 Spring Data Jpa 更详细的教程,我就不再赘述了,这里就做一个简单介绍,以后有机会了再向大家详细介绍。

3. 实战

接下来我们就通过一个简单的案例来看看在 Spring Boot 中如何整合 Jpa (本视频节选自松哥自制的 Spring Boot2 系列视频教程,本集基于 Spring Boot2.1.6 录制,麦有点问题,建议带上耳机观看哦)。

好了,看完后不知道大家有没有 GET 到技能点呢?有问题欢迎留言讨论。

手把手教你 Spring Boot 整合 Spring Data Jpa

1、

2、

3、

4、

5、

6、

7、

8、

9、


喜欢就点个"在看"呗^_^

以上是关于Spring boot-手把手教你使用Token的主要内容,如果未能解决你的问题,请参考以下文章

手把手教你利用Spring Boot实现各种参数校验

手把手教你手写一个最简单的 Spring Boot Starter

手把手教你写一个Spring Boot Starte

手把手教你搭建Spring Boot+Vue前后端分离

手把手教你定制标准Spring Boot starter,真的很清晰

这里有两种Spring Boot项目启动,手把手教你自动执行方法的实现方式!