JWT入门案例
一、简介
JSON Web token简称JWT, 是用于对应用程序上的用户进行身份验证的标记。也就是说, 使用 JWTS 的应用程序不再需要保存有关其用户的 cookie 或其他session数据。此特性便于可伸缩性, 同时保证应用程序的安全
二、格式
- JWT就是一个字符串,经过加密处理与校验处理的字符串,形式为:A.B.C
- A由JWT头部信息header加密得到
- B由JWT用到的身份验证信息json数据加密得到
- C由A和B加密得到,是校验部分
三、代码实现
3.1引入依赖
| <dependency> |
| <groupId>io.jsonwebtoken</groupId> |
| <artifactId>jjwt</artifactId> |
| <version>0.9.1</version> |
| </dependency> |
3.2生成token
| |
| |
| |
| @Test |
| public void createToken(){ |
| |
| Map<String,Object> shuiaGe = new HashedMap(); |
| shuiaGe.put("id",19040123); |
| shuiaGe.put("phoneNumber","18177760987"); |
| |
| |
| long nowTime = System.currentTimeMillis(); |
| String token = Jwts.builder() |
| .signWith(SignatureAlgorithm.HS512, "ZhangDaShuaiGe") |
| .setClaims(shuiaGe) |
| .setExpiration(new Date(nowTime + 5000)) |
| .compact(); |
| |
| System.out.println(token); |
| } |
3.3解析token
| |
| |
| |
| @Test |
| public void parseToken (){ |
| |
| |
| String tokrn = "eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE2NjU2NTA2NDcsInBob25lTnVtYmVyIjoiMTgxNzc3NjA5ODciLCJpZCI6MTkwNDAxMjN9.rkfsdgDy8ezCNvcCT-QjhlHLPe1_6TNJx_CZMGkUKXm03y6yYOG5jS292__13yb9sLltzIu9voxtIwPa2l4bkA"; |
| |
| |
| try { |
| |
| Claims zhangDaShuaiGe = Jwts.parser() |
| .setSigningKey("ZhangDaShuaiGe") |
| .parseClaimsJws(tokrn) |
| .getBody(); |
| Object id = zhangDaShuaiGe.get("id"); |
| String phoneNumber = (String) zhangDaShuaiGe.get("phoneNumber" ); |
| |
| System.out.println(id+":"+phoneNumber); |
| } catch (ExpiredJwtException e) { |
| System.out.println("token已过期"); |
| } catch (SignatureException e) { |
| System.out.println("token不合理"); |
| } |
| |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理