JWT浅了解
JWT通过数字签名的方式(让我想起了软考),以json对象为载体,在不同的服务终端之间安全传输信息
是一种授权认证
生成token的原理:通过header的加密方式,对payload进行加密。然后把header和payload再次加密生成signature
贴一下我的settoken
1 2 3 | return JWT.create().withAudience(userId) //这里是payload 设置了jwt的audience声明,aud表示该JWT所面向的用户,userId表示用户 .withExpiresAt(DateUtil.offsetHour( new Date(), 2 )) //这里是payload,设置了jwt的过期时间 .sign(Algorithm.HMAC256(password)); //这里是signature,对jwt进行签名 |
很明显,我上述没有设置header,一般情况下jwt库会默认提供一组合式的header参数,比如"alg":"HS256",表示使用HMAC SHA-256算法进行签名
如果需要自定义Header,可以使用.withHeader(Map<String, Object> header)
方法来设置
如何根据token获得当前用户
1 2 3 4 | HttpServletRequest r=((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); token=r.getHeader( "token" ); token=r.getParameter( "token" ); String adminId=JWT.decode(token).getAudience().get( 0 ); |
前端如何获取token:将token和用户信息在登录时一起放在localStorage中,在每次发请求时取出localStorage。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?