登录校验原理过程和统一拦截技术(Cookie、Sesstion 和JWT令牌)

文章介绍了Web应用中进行登录校验的重要性,以及三种常见的会话管理技术:基于Cookie的客户端会话跟踪,服务端Session,以及JWT令牌技术。Cookie和Session各有优缺点,JWT则能解决集群环境下的认证问题并减轻服务器存储压力。
摘要由CSDN通过智能技术生成

一、登录校验

  • 问题:在未登录情况下,我们也可以直接访问部门管理、员工管理等功能。
  • 由于浏览器与web服务器中的数据交互是通过HTTP协议的,而HTTP协议是无状态的–即每个页面中的请求和响应都是独立的,没有状态存在。
  • 所以我们需要进行登录校验

1.登录校验

  • 每次访问页面的时候可以用if...else...来进行判断用户是否登录。但过程较为繁琐,所以我们设置统一拦截。

二、统一拦截

在这里插入图片描述

1.登录标记

(1).会话技术:

  • 用户登录成功之后,每一次请求中,都可以获取到该标记。
  1. 会话:
  • 用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束在一次会话中可以包含多次请求和响应。
  1. 会话跟踪:
  • 一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据

(2).会话跟踪方案:

  1. 客户端Cookie(传统)
  • 客户端会话跟踪技术:Cookie
import com.mannor.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Slf4j
@RestController
public class SessionController {
    //设置cookie
    @GetMapping("/c1")
    public Result cookie(HttpServletResponse response) {
        response.addCookie(new Cookie("login_username", "mannor"));//设置Cookie/响应Cookie
        return Result.success();

    }

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

优点:HTTP协议中支持
缺点:1.移动端APP无法使用cookie不安全,2.用户可以自己禁用,3.Cookiecookie不能跨域。

  1. 服务端Session(传统)
  • 服务端会话跟踪技术:Session,基于cookie开发
import com.mannor.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

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

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

优点:存储在服务器,安全性高
缺点:1.在服务器集群的情况下无法直接使用Session; 2.Cookie的缺点(基于Cookie开发)。

  1. JWT令牌技术 (主流技术)
//具体相关内容在下详细介绍

优点:1.支持PC端和移动端 2.解决了集群环境下的认证问题 3.减轻了服务器端存储的压力(不用存储)。
缺点:需要自己实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曼诺尔雷迪亚兹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值