Cookie

优点:

缺点:

使用

1.设置 Cookie

@GetMapping ("/c1")
public Result cookie1 (HttpServletResponse response){
    response.addCookie (new Cookie ("login_username", "itheima")); // 设置 Cookie / 响应 Cookie
    return Result.success ();
}

2.获取 Cookie

@GetMapping ("/c2")
public Result cookie2 (HttpServletRequest request){
    Cookie [] cookies = request.getCookies ();
    for (Cookie cookie : cookies) {
        if (cookie.getName ().equals ("login_username")){
            System.out.println ("login_username:"+cookie.getValue ()); // 输出 name 为 login_username 的 cookie
        }
    }
    return Result.success ();
}

Session

优点:

缺点:

1.存值

@GetMapping ("/s1")
public Result session1 (HttpSession session){
    log.info("HttpSession-s1: {}", session.hashCode ());
    session.setAttribute ("loginUser", "tom"); // 往 session 中存储数据
    return Result.success ();
}

3.取值

@GetMapping ("/s2")
public Result session2 (HttpSession session){
    log.info("HttpSession-s2: {}", session.hashCode ());
    Object loginUser = session.getAttribute ("loginUser"); // 从 session 中获取数据
    log.info("loginUser: {}", loginUser);
    return Result.success(loginUser);
}

Token

优点:

缺点:

JWT令牌

介绍:

组成:

实现:

  private static final String SECRET_KEY = "WFhYWUphZGU=";
  private static final long EXPIRATION_TIME = 12 * 60 * 60 * 1000;

SECRET_KEY : 密钥,通过Base64编码
EXPIRATION_TIME : 令牌有效时长

  public static String generateToken(Map<String,Object> claims){
      return Jwts.builder()
              .signWith(SignatureAlgorithm.HS256,SECRET_KEY)  //设置加密算法和密钥
              .addClaims(claims)  //添加信息
              .setExpiration(new Date(System.currentTimeMillis()+EXPIRATION_TIME))    //设置有效期
              .compact();
  }
  public static Claims parseToken(String token){
      return Jwts.parser()
              .setSigningKey(SECRET_KEY)  //设置密钥
              .parseClaimsJws(token)  //解析信息
              .getBody();
  }