1、什么是JWT
- jwt可以生成一个加密的token,作为用户登录的令牌,当用户登陆成功之后,发放给客户端。请求需要登录的资源或者接口的时候,将token携带,后端验证token是否合法。
- jwt有三部分组成:
- A:Header,{"type":"JWT","alg":"HS256"}固定
- B:playload,存放信息,比如,用户id,过期时间等,可以被解密,不能存放敏感信息
- C:签证,A和B加上秘钥 加密而成,只要密钥不丢失,可以认为是安全的。
- jwt验证,主要就是验证C部分是否合法
2、生成JWT令牌
- 引入依赖
<!-- JWT依赖--> <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version> </dependency>
2、构建jwt生成器
public static String createToken(String username, long tokenExpirationInSeconds) {// 设置JWT的过期时间Date now = new Date();Date expiryDate = new Date(now.getTime() + tokenExpirationInSeconds * 1000);// 创建JWT的Builderreturn Jwts.builder()// 不推荐在生产环境中使用无状态的JWT,这里仅为示例.signWith(SignatureAlgorithm.HS512, "secret".getBytes()).setSubject(username) // 设置JWT的主题,这里存放用户名.setIssuedAt(now).setExpiration(expiryDate).compact();}
3、从jwt解析出username
public static String parseJWTAndGetUsername(String secretKey, String token) {// 创建JwtParser对象并传入密钥JwtParser parser = Jwts.parser().setSigningKey(secretKey.getBytes());// 解析JWT并获取Claims对象Claims claims = parser.parseClaimsJws(token).getBody();// 从Claims对象中获取用户名return claims.getSubject();}