第三阶段(day16)jjwt

怎么吃透一个java项目? - 知乎 (zhihu.com)https://www.zhihu.com/question/422346147

java开发做项目的思路

java开发做项目的思路_Andre_dong的博客-CSDN博客_java做项目的思路https://blog.csdn.net/Andre_dong/article/details/107488510

学习Java如何开始第一个项目?

学习Java如何开始第一个项目? - 知乎 (zhihu.com)https://www.zhihu.com/question/320165362

 1.jjwt组件认识

官网:GitHub - jwtk/jjwt: Java JWT: JSON Web Token for Java and Android

jjwt:JSON Web Token for Java and Android

token:令牌,一个加密后的字符串而已.字符串中含有的信息(用户标识,令牌签发时间,有效时间,防伪标志).

jjwt:用来对明文的json格式的token字符串按照指定的秘钥进行加密,生成一套token密文字符串.

token应用场景:

  • 有时效性的url连接:邮箱重置密码.账号激活.

  • 登录校验

    • 用户登录成功后,把登录用户对象保存到HttpSession对象中,在登录 拦截中,从HttpSession中获取到登录用户对象,有的话,则代表已登录,没有则代表未登录.一旦引入了tomcat分布式部署,则使用session来存储登录用户进行登录 校验就有问题.如何解决?

      • 使用spiring-session组件,该组件基于redis服务器来存储HttpSession对象达到session共享的目的;

      • 不使用HttpSession对象,使用token令牌机制来进行登录校验.

  • 接口权限控制

    • 在访问接口时,接口地址中带有token信息;

    • 拦截器校验token,校验合法性,校验通过了,则根据token中的用户标识,获取该用户是否有权限访问此接口.

2.编写jjwt工具类

jjwt组件对应的token格式:

{"alg":"加密算法名称"}.{"issuedAt":"生成时间","Expiration":"过期时间","uid":"用户标识"...}.{body对应的密文}

header(算法名).body(签名信息,标准签名,自定义签名).对body按照header指定的算法,生成密文字符串.

一个jjwt的token字符串:算法名.明文.密文

jjwt还要复杂校验token.:对明文再次按照算法,使用秘钥进行加密,比对新生成的密文与之前的密文是否 一致.

  • 添加jjwt组件依赖

<dependency>
  <groupId>io.jsonwebtoken</groupId>
  <artifactId>jjwt-api</artifactId>
  <version>${jjwt.version}</version>
</dependency>
<dependency>
  <groupId>io.jsonwebtoken</groupId>
  <artifactId>jjwt-impl</artifactId>
  <version>${jjwt.version}</version>
</dependency>
<dependency>
  <groupId>io.jsonwebtoken</groupId>
  <artifactId>jjwt-jackson</artifactId>
  <version>${jjwt.version}</version>
</dependency>
  • 编写生成token方法

  • 编写解析token方法

3.登录校验控制

  • 登录成功后,生成token.并通过响应头返回客户端;

在跨域请求中,自定义的响应头,是无法正常返回客户端的,因为在CorsFilter中,并没有配置响应头策略,需要在跨域过滤器中配置exposedHeaders允许服务端返回的响应头

  • 客户端保存token

在axios的响应拦截中判断响应头中是否包含admin_token响应头;有的话,则获取并保存

  • 客户端新的请求,要携带token,发送至服务端;

token放在请求头,发送服务端;请求体放的都是请求业务数据.

  • 服务端拦截器要校验token合法性.

拦截器要获取请求头中的admin_token令牌.
对token进行校验,未通过,返回重登录.
通过的话,要从redis中获取登录用户对象,并把该对象加入线程变量.
还需要在拦截器中对token进行刷新,延迟到期时间
​
前端在响应拦截中对服务单拦截器返回的重新登录,要进行处理.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值