登录校验(Cookie、Session和JWT令牌)

概述

登录校验指的是,当我们的服务器接收到客户端发送的请求时,首先要对请求进行校验,校验用户是否已登录。如果未登录,不允许执行业务操作,跳转到登陆界面,要求登录成功后再允许执行业务操作;否则就直接执行对应的业务操作。

会话技术

会话

指的是用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。一次会话中可以包含多次的请求以及响应。

会话跟踪

一种用来维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便再同一次会话的多次请求之间共享数据。

会话跟踪方案

  • 客户端会话跟踪技术:Cookie
  • 服务端会话跟踪技术:Session
  • 令牌技术

会话跟踪方案对比

Cookie

  • 优点:HTTP协议中支持的技术
  • 缺点:
    • 移动端APP无法使用Cookie
    • 不安全,用户可以自己禁用Cookie
    • Cookie不可以进行跨域(主机必须均处于同一网段)

Session

  • 优点:存储在服务端,安全
  • 缺点:
    • 服务器集群环境下无法直接使用Session
    • Cookie的所有缺点

令牌技术

  • 优点:
    • 支持PC端、移动端
    • 解决集群环境下的认证问题
    • 减轻服务器端存储压力
  • 缺点:需要自己实现

JWT令牌技术

全称

JSON Web Token(官网:https://jwt.io/)

定义了一种简洁、自包含的格式,用于在通信双方以JSON数据格式安全的传输信息。由于数字签名的存在,这些信息均是可靠的。

JWT令牌组成

  • 第一部分: Header(头),记录令牌类型,签名算法等。例如:{"alg":"HS256", "type":"JWT"}。
  • 第二部分: Payload(有效载荷),携带自定义、默认的信息等。例如:{"id":"1","username":"fhh"}。
  • 第三部分: Signature(签名),防止Token被恶意篡改、确保其安全性。将Header、Payload,并加入指定密钥,通过指定签名算法计算而来。

生成 / 解析JWT令牌代码示例

package com.fhh.springboottlias.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
import java.util.Map;

public class JwtUtils {

    private static String signKey = "fhhhh";
    private static Long time = 43200000L;    // 有效时间为12h

    /*
     * 生成JWT令牌
     */
    public static String getJWT(Map<String, Object> claims){
        String jwt = Jwts.builder()
                .signWith(SignatureAlgorithm.HS256, signKey)
                .addClaims(claims)
                .setExpiration(new Date(System.currentTimeMillis() + time))
                .compact();
        return jwt;
    }

    /*
     * 解析JWT令牌
     */
    public static Claims parseJWT(String jwt){
        Claims claims = Jwts.parser()
                .setSigningKey(signKey)
                .parseClaimsJws(jwt)
                .getBody();
        return claims;
    }
}

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值