前言
这篇我们主要实现后端对用户登录的身份校验,是web项目核心功能之一。
后续会有springboot整合各个功能的文章,同时也会有前端的相关知识,希望能给web开发学习者提供帮助~
一、jwt是什么?
jwt(json web token)是一种基于 json 的轻量级开放标准(rfc 7519),用于在网络应用间安全地传递声明信息。它通过数字签名确保信息的完整性和真实性,常被用于身份验证和数据交换场景。
二、实现步骤
1.引入maven坐标
在pom.xml中引入maven坐标:
<dependency>
<groupid>com.auth0</groupid>
<artifactid>java-jwt</artifactid>
<version>3.10.3</version>
</dependency>2.获取token
封装一个静态函数用来生成token。在service层用户登录信息匹配成功后,可以调用该函数,来获取token,同时把token密钥返回给前端。
public static string gettoken(string userid, string password){
long expire_time = 60 * 60 * 1000; //过期时间 60 分钟
date date = new date(system.currenttimemillis() + expire_time);
string token = jwt.create().withaudience(userid) // 将 userid 保存到 token 里面
.withexpiresat(date) //60分钟后token过期
.sign(algorithm.hmac256(password)); //使用用户id和password进行token生成
return token; //返回加密后的token密钥
}3.jwt拦截器的实现
public class jwtinterceptor implements handlerinterceptor {
@autowired
private userservice userservice;
@override
public boolean prehandle(httpservletrequest request, httpservletresponse response, object handler) {
//通过预检请求
if(request.getmethod().equals("option")){
return true;
}
//从请求头中获取token,xxx为前端请求头中value为token密钥的key
string token = request.getheader("xxx");
// 如果不是映射到方法直接通过
if(!(handler instanceof handlermethod)){
return true;
}
//serviceexception是自定义的异常
if(token == null){
throw new serviceexception(constants.code_401,"请登录");
}
string userid;
try {
//对token密钥进行解密,获取用户id
userid = jwt.decode(token).getaudience().get(0);
} catch (jwtdecodeexception j) {
//token密钥有误,无法解密
throw new serviceexception(constants.code_401,"请登录");
}
//通过解密后获取的用户id进行数据库查询,判断是否有该id的用户
user user = userservice.getuser(userid);
if (user == null) {
//没有该用户
throw new serviceexception(constants.code_401,"请登录");
}
//获取从数据库查询出来的用户密码,对前端带过来的token密钥进行进一步验证
jwtverifier jwtverifier = jwt.require(algorithm.hmac256(user.getpassword())).build();
try {
jwtverifier.verify(token);
} catch (jwtverificationexception e) {
//token密钥有误
throw new serviceexception(constants.code_401,"请登录");
}
return true;
}
}
4.jwt拦截器配置
@configuration
public class interceptorconfig implements webmvcconfigurer {
@override
public void addinterceptors(interceptorregistry registry) {
//"/user/login","/xxx","/yyy/**" 为jwt拦截器不拦截,直接放行的接口
registry.addinterceptor(jwtinterceptor())
.addpathpatterns("/**").excludepathpatterns("/user/login","/xxx","/yyy/**");
}
@bean
public jwtinterceptor jwtinterceptor(){
return new jwtinterceptor();
}
}
总结
以上实现了后端对用户登录的身份校验,希望对未来的高级工程师们起到帮助,谢谢啦~
到此这篇关于springboot中jwt登录校验及其拦截器实现的文章就介绍到这了,更多相关springboot jwt登录校验及拦截器内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论