详解基于JWT的springboot权限验证技术实现
JWT简介
JsonWebToken(JWT):JSON网络令牌,是为了在网络应用环境间传递声明而制定的一种基于JSON的开放标准((RFC7519)。JWT是一个轻便的安全跨平台传输格式,定义了一个紧凑的自包含的方式用于通信双方之间以JSON对象行使安全的传递信息。因为数字签名的存在,这些信息是可信的。
实现步骤:
环境springboot
1、添加jwt依赖
com.auth0 java-jwt 3.8.1 io.jsonwebtoken jjwt 0.9.1
2、在src下创建annotation包
新建自定义注解类JwtToken
packagecom.qf.tyleryue_one.annotation;
importjava.lang.annotation.ElementType;
importjava.lang.annotation.Retention;
importjava.lang.annotation.RetentionPolicy;
importjava.lang.annotation.Target;
/**
*自定义注解:方法前表示方法需要拦截
*/
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public@interfaceJwtToken{
}
3、在src下创建utils包
新建自定义JwtUtils工具类
packagecom.qf.tyleryue_one.utils;
importcom.auth0.jwt.JWT;
importcom.auth0.jwt.JWTCreator;
importcom.auth0.jwt.JWTVerifier;
importcom.auth0.jwt.algorithms.Algorithm;
importjdk.internal.org.objectweb.asm.TypeReference;
importjava.util.Date;
/**
*用来生成签名,校验签名,通过签名
*/
publicclassJwtUtils{
//令牌有效时间
privatefinalstaticlongEXPIRE_TIME=5*60*1000;
//密钥
privatefinalstaticStringSECRECT="Tyler_Yue_key";
/**
*创建令牌
*/
publicstaticStringsign(StringuserId){
//构建失效时钟
Dateexipre_date=newDate(System.currentTimeMillis()+EXPIRE_TIME);
//创建令牌
JWTCreator.Builderbuilder=JWT.create();
//给jwt令牌playload中放入发令牌放的用户
//给userid用户发令牌
builder.withAudience(userId);
//设置令牌失效时间
builder.withExpiresAt(exipre_date);
//对令牌密钥进行加密
Algorithmalgorithm=Algorithm.HMAC256(SECRECT);
Stringsign=builder.sign(algorithm);
returnsign;//返回令牌
}
/**
*验证令牌
*/
publicstaticbooleanverifyToken(Stringtoken){
try{
//生成校验器
Algorithmalgorithm=Algorithm.HMAC256(SECRECT);
//校验
JWTVerifierbuild=JWT.require(algorithm).build();
//无异常则校验成功
returntrue;
}catch(Exceptione){
thrownewRuntimeException("令牌过期");
}
}
}
4、在src下新建vo包
封装一个返回用户带令牌的对象
packagecom.qf.tyleryue_one.vo;
importcom.alibaba.druid.filter.AutoLoad;
importlombok.AllArgsConstructor;
importlombok.Data;
importlombok.NoArgsConstructor;
/**
*封装一个返回含令牌的用户对象
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
publicclassTokenVo{
//用户名
privateStringusernaem;
//令牌名
privateStringtoken;
}
5、举例controller层用户登录业务登录带令牌
packagecom.qf.tyleryue_one.controller;
importcom.qf.tyleryue_one.entity.VueUser;
importcom.qf.tyleryue_one.service.VueUserService;
importcom.qf.tyleryue_one.utils.JwtUtils;
importcom.qf.tyleryue_one.vo.Msg;
importcom.qf.tyleryue_one.vo.TokenVo;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.*;
importjava.util.UUID;
/**
*登录业务
*/
@Controller
publicclassVueUserController{
@Autowired
privateVueUserServicevueUserService;
@RequestMapping(value="/dealLogin",method=RequestMethod.POST)
@CrossOrigin
@ResponseBody
publicMsglogin(@RequestBodyVueUservueUser){
VueUservueUser1=vueUserService.selectByUsername(vueUser.getUsername());
if(vueUser1!=null){
if(vueUser1.getPassword().equals(vueUser.getPassword())){
//密码匹配,发放令牌
///随机生成字符串未userid
Stringuserid=UUID.randomUUID().toString();
Stringtoken=JwtUtils.sign(userid);
//封装令牌对象
TokenVotokenVo=newTokenVo(vueUser.getUsername(),token);
returnnewMsg(200,"登录成功,令牌已发放",tokenVo);
}else{
returnnewMsg(403,"密码错误",null);
}
}else{
returnnewMsg(403,"用户不存在",null);
}
}
}
到此这篇关于详解基于JWT的springboot权限验证技术实现的文章就介绍到这了,更多相关springbootJWT权限验证内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。