尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

jwt生产token,简单版helloworld

jwt生产token,简单版helloworld 第一步添加依赖dependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactIdversion0.9.1/version/dependencydependencygroupIdjavax.xml.bind/groupIdartifactIdjaxb-api/artifactIdversion2.3.1/version/dependency第二步配置yamljwt:tokenHeader:Authorization#JWT存储的请求头 secret:mall-jwt-test #jwt加解密使用的密钥 expiration:604800#JWT的超时时间 tokenHead:Bearer#JWT负载中拿到的开头代码片编写配置类packagecom.example.demo.config;importlombok.Getter;importlombok.Setter;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.context.annotation.Configuration;importorg.springframework.stereotype.Component;/** * JWT配置类读取Application.yml中的配置 * * author AdminMall * */SetterGetterConfigurationpublicclassJwtConfig{Value(${jwt.tokenHeader})privateStringtokenHeader;// JWT存储的请求头Value(${jwt.secret})privateStringsecret;// jwt加解密使用的密钥Value(${jwt.expiration})privatelongexpiration;// JWT的超时时间Value(${jwt.tokenHead})privateStringtokenHead;// JWT负载中拿到的开头}第三步编写拦jwt生成工具类packagecom.example.demo.utils;importjava.util.Date;importjava.util.HashMap;importjava.util.Map;importcom.example.demo.config.JwtConfig;importorg.springframework.beans.factory.annotation.Autowired;importcom.example.demo.entity.User;importio.jsonwebtoken.Claims;importio.jsonwebtoken.Jwts;importio.jsonwebtoken.SignatureAlgorithm;importorg.springframework.stereotype.Component;/** * * JWT工具类 * * author MAll * * */ComponentpublicclassJwtKit{AutowiredprivateJwtConfigjwtConfig;/** * 生成Token * * param user 自定义要存储的用户对象信息 * return */publicStringgenerateToken(Useruser){MapString,ObjectclaimsnewHashMapString,Object();claims.put(name,user.getName());claims.put(createdate,newDate());claims.put(id,System.currentTimeMillis());returnJwts.builder().addClaims(claims)// 要存储的数据.setExpiration(newDate(System.currentTimeMillis()jwtConfig.getExpiration()))// 过期时间.signWith(SignatureAlgorithm.HS256,jwtConfig.getSecret())// 加密算法和密钥.compact();// 打包返回 3部分}/** * 校验Token是否合法 * * param token 要校验的Token * return */publicClaimsparseJwtToken(Stringtoken){Claimsclaimsnull;claimsJwts.parser().setSigningKey(jwtConfig.getSecret())// 根据哪个密钥解密.parseClaimsJws(token)// 设置要解析的Token.getBody();returnclaims;}}第四步编写拦截器packagecom.example.demo.interceptor;importcom.example.demo.config.JwtConfig;importcom.example.demo.utils.JwtKit;importjakarta.servlet.http.HttpServletRequest;importjakarta.servlet.http.HttpServletResponse;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Component;importorg.springframework.web.servlet.HandlerInterceptor;importio.jsonwebtoken.Claims;/** * 自定义拦截器主要用于用户鉴权 * * author AdminMall * */ComponentpublicclassAuthInterceptorHandlerimplementsHandlerInterceptor{AutowiredprivateJwtConfigjwtConfig;AutowiredprivateJwtKitjwtKit;/** * 前置拦截器 */OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{// 获取到JWT的TokenStringjwtTokenrequest.getHeader(jwtConfig.getTokenHeader());if(jwtToken!null){// 截取中间payload部分StringpayloadTokenjwtToken.substring(jwtConfig.getTokenHead().length());// 解析Token获取Claims MapClaimsclaimsjwtKit.parseJwtToken(payloadToken);// 获取payload中的报文System.out.println(登陆人claims.get(name).toString());returntrue;}System.out.println(登陆非法);returnfalse;}}第五步编写controllerpackagecom.example.demo.controller;importcom.example.demo.utils.JwtKit;importjakarta.servlet.http.HttpServletRequest;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;importcom.example.demo.entity.User;RestControllerRequestMapping(/jwt)publicclassJwtController{AutowiredprivateJwtKitjwtKit;GetMapping(/getJwtToken)publicStringgetJwtToken(HttpServletRequestrequest){UserusernewUser();user.setName(王天一);StringtokenjwtKit.generateToken(user);returntoken;}RequestMapping(/parseJwtToken)publicStringparseJwtToken(HttpServletRequestrequest){return解析成功;}}第六步postman调用获取jwt第七步验证token能不能解析成功到这里就结束了一个简单的jwt的hello world
返回列表