基于前后端分离的身份认证方式——JWT
什么是JWT
JWT——Json web token
是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准,可实现无状态、分布式的Web应用授权。
现在一般都用redis来出来token做前后端分离,但jwt在某些时候也可以代替redis来处理token。
pom的配置
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.3.0</version>
</dependency>
简单的使用方法:
public String generateToken(UserDTO user) {
Date nowDate = new Date();
user.setPassword("");
Date expiryDate = new Date(nowDate.getTime() + jwtExpiration);
try {
String newToken = JWT.create()
.withSubject(user.getId().toString())
.withClaim("current_user", JSON.toJSONString(user))
.withIssuedAt(nowDate)
.withExpiresAt(expiryDate)
.sign(Algorithm.HMAC256(jwtSecret));
return newToken;
} catch (UnsupportedEncodingException exception){
logger.error("Unsupported JWT signature");
} catch (JWTCreationException exception){
logger.error("Create JWT signature exception");
}
return null;
}
public boolean validateToken(String authToken) {
try {
JWTVerifier verifier = JWT.require(Algorithm.HMAC256(jwtSecret))
.build();
DecodedJWT jwt = verifier.verify(authToken);
return true;
} catch (UnsupportedEncodingException e) {
logger.error("Unsupported JWT signature");
} catch (JWTVerificationException exception) {
logger.error("Verification JWT signature exception");
}
return false;
}
public Long getUserIdFromJWT(String token) {
DecodedJWT jwt = JWT.decode(token);
return Long.parseLong(jwt.getSubject());
}
public Date getExpiresDateFromJWT(String token) {
DecodedJWT jwt = JWT.decode(token);
return jwt.getExpiresAt();
}
1,在后端把用户的信息生成token,2,验证过期,3,从token得到你需要的信息,4,得到失效时间
还有些配置设置如下:
# 是否使用app.jwt.test.token的token作为测试(获取用户id为0)
app.jwt.allow.test.token=true
app.jwt.test.token=test_token
app.jwt.secret=jwt_test_$test
# token过期时间,单位是毫秒
app.jwt.expiration=43200000
# token剩余指定时间时刷新,单位是毫秒
app.jwt.refresh.limit=14400000
基于前后端分离的身份认证方式——JWT的更多相关文章
- shiro,基于springboot,基于前后端分离,从登录认证到鉴权,从入门到放弃
这个demo是基于springboot项目的. 名词介绍: ShiroShiro 主要分为 安全认证 和 接口授权 两个部分,其中的核心组件为 Subject. SecurityManager. Re ...
- 微服务下前后端分离的统一认证授权服务,基于Spring Security OAuth2 + Spring Cloud Gateway实现单点登录
1. 整体架构 在这种结构中,网关就是一个资源服务器,它负责统一授权(鉴权).路由转发.保护下游微服务. 后端微服务应用完全不用考虑权限问题,也不需要引入spring security依赖,就正常的 ...
- 基于前后端分离的Nginx+Tomcat动静分离
1.什么是动静分离 "动"与"静" 在弄清动静分离之前,我们要先明白什么是动,什么是静. 在Web开发中,通常来说,动态资源其实就是指那些后台资源,而静态资源就 ...
- 前后端分离之 跨域和JWT
书接上回:https://www.cnblogs.com/yangyuanhu/p/12081525.html 前后端分离案例 现在把自己当成是前端,要开发一个前后分离的简单页面,用于展示学生信息列表 ...
- 从壹开始前后端分离[.netCore 不定期 ] 36 ║解决JWT自定义中间件授权过期问题
缘起 哈喽,老张的不定期更新的日常又开始了,在咱们的前后端分离的.net core 框架中,虽然已经实现了权限验证<框架之五 || Swagger的使用 3.3 JWT权限验证[修改]>, ...
- 用Spring Security, JWT, Vue实现一个前后端分离无状态认证Demo
简介 完整代码 https://github.com/PuZhiweizuishuai/SpringSecurity-JWT-Vue-Deom 运行展示 后端 主要展示 Spring Security ...
- web 部署专题(九):Nginx 前后端分离中csrf_token 认证的实现
1. 思路 参考:https://stackoverflow.com/questions/20826201/simple-csrf-protection-using-nginx-alone?r=Sea ...
- [转] 基于NodeJS的前后端分离的思考与实践(五)多终端适配
前言 近年来各站点基于 Web 的多终端适配进行得如火如荼,行业间也发展出依赖各种技术的解决方案.有如基于浏览器原生 CSS3 Media Query 的响应式设计.基于云端智能重排的「云适配」方案等 ...
- Angular企业级开发(9)-前后端分离之后添加验证码
1.背景介绍 团队开发的项目,前端基于Bootstrap+AngularJS,后端Spring MVC以RESTful接口给前端调用.开发和部署都是前后端分离.项目简单部署图如下,因为后台同时采用微服 ...
随机推荐
- 新更新,又是一年了。这次记录下关于android版的WeiboDemo的问题
时隔一年多,现在又开始折腾android的代码了.之前看了Learning android,就想看下能否移植到Weibo.然后就下了weibo的代码,代码包里有个实例叫WeiboSDKDemo. 为了 ...
- MySQL外键设置中的的 Cascade、NO ACTION、Restrict、SET NULL
例如: ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo FOREIGN KEY(gradeid) REFERENCES grade(id) ON DELET ...
- asp.net core 2.1 部署 centos7
asp.net core 2.1 部署 centos7 Kestrel 非常适合从 ASP.NET Core 提供动态内容. 但是,Web 服务功能不像服务器(如 IIS.Apache 或 Nginx ...
- 基本的CRUD操作
导入包---实体类------数据库连接----数据库操作----service层数据操作----网页对service层可视化实现 model package com.ij34.model; publ ...
- sqlserver 学习之分离与附加数据库
在学习sqlserver数据库的过程中,我们会学习到有关一些听起来比较陌生的专用名词,比如说分离与附加这两个专有名词,对于我来说就是比较陌生的.好的,下面我们一起来学习一下吧.为了讲的通俗一点,下面以 ...
- Python爬虫之Requests库的基本使用
import requests response = requests.get('http://www.baidu.com/') print(type(response)) print(respons ...
- LV 指定或修改逻辑卷的major, minor号[RHEL6]
在创建逻辑卷时,可以指定逻辑卷的major和minor设备号. [-M|--persistent {y|n}] //Set to y to make the minor number specifie ...
- CentOS7编译安装php7.1
1.首先安装依赖包: yum install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl ...
- 滑动窗口最大值的golang实现
给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口 k 内的数字.滑动窗口每次只向右移动一位. 返回滑动窗口最大值 输入: nums = [, ...
- vue给不同环境配置不同打包命令
第1步:安装cross-env 1 npm i --save-dev cross-env 第2步:修改各环境下的参数 在config/目录下添加test.env.js.pre.env.js. 修改pr ...