登录校验:保障系统安全访问的关键技术解析

发布于:2025-04-19 ⋅ 阅读:(106) ⋅ 点赞:(0)

摘要:本文围绕Tlias智能学习辅助系统的登录校验功能展开,深入剖析了实现登录校验的必要性,介绍了会话技术和统一拦截技术等关键实现思路,并对Cookie、Session和令牌技术三种会话跟踪方案进行了详细对比,旨在为系统的安全访问提供全面且深入的技术支持。

关键词:登录校验;会话技术;统一拦截技术;会话跟踪方案
参考资料:黑马程序员day12 完整项目请从第10天开始看

一、引言

在完成基础登录功能开发与测试后,发现系统存在安全漏洞,即未登录状态下通过直接输入地址仍可访问后端管理系统页面。为实现只有登录用户才能访问后端系统页面的目标,需引入登录校验机制。

二、登录校验

2.1 问题分析

当前系统虽完成登录功能,但对于部门管理、员工管理及文件上传等接口,服务器端未对用户登录状态进行判断,导致无论用户是否登录,均可访问相关数据。登录校验旨在服务器端接收到浏览器请求后,先校验用户登录状态。若已登录,则执行相应业务操作;若未登录,则返回错误结果并引导前端跳转至登录页面。

HTTP协议是无状态协议,每次请求相互独立,服务器无法直接判断用户是否登录 。实现登录校验需分两步:一是在员工登录成功后存储登录成功信息;二是在浏览器发起请求时,在服务端统一拦截并进行登录校验。为简化相同代码逻辑在各功能中的重复编写,可采用统一拦截技术。实现登录校验主要涉及会话技术和统一拦截技术,其中统一拦截技术有Servlet规范中的Filter过滤器和Spring提供的interceptor拦截器两种方案。

2.2 会话技术

2.2.1 会话技术介绍
  • 会话的定义:在日常生活中,会话指谈话、交谈;在web开发中,会话指浏览器与服务器之间的一次连接。从用户打开浏览器首次访问服务器建立会话,直至任何一方断开连接会话结束。一次会话可包含多次请求和响应,例如在浏览器与服务器均未关闭的情况下,用户依次访问登录接口、部门管理接口和员工管理接口,这三次请求均属于同一次会话。需注意,会话与浏览器相关,多个浏览器客户端与服务器建立连接会产生多个会话,同一浏览器未关闭时的多次请求属于同一个会话,关闭浏览器或服务器会导致会话结束。
  • 会话跟踪的概念:会话跟踪是维护浏览器状态的方法,服务器通过识别多次请求是否来自同一浏览器,实现在同一次会话的多次请求间共享数据。由于HTTP的无状态特性,需通过会话跟踪技术解决后续请求获取前次请求生成数据的问题。
  • 会话跟踪技术分类
    • Cookie(客户端会话跟踪技术):数据存储在客户端浏览器。
    • Session(服务端会话跟踪技术):数据存储在服务端。
    • 令牌技术:令牌作为一种安全凭证,在不同的系统组件或服务之间传递,以验证和授权相关操作。
2.2.2 会话跟踪方案
方案一 - Cookie
  • 实现思路:Cookie作为客户端会话跟踪技术,存储在客户端浏览器。当浏览器首次请求服务器(如请求登录接口),服务器设置Cookie,可在其中存储用户相关数据,如用户名、用户ID。服务器响应数据时会自动通过响应头Set-Cookie将Cookie发送给浏览器浏览器接收后自动存储在本地
  • 后续每次请求,浏览器会自动通过请求头Cookie将本地存储的Cookie携带到服务端。服务端通过判断Cookie值是否存在,确定客户端是否已登录,从而实现同一次会话不同请求间的数据共享。
  • 代码测试
@Slf4j
@RestController
public class SessionController {

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

    //获取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();
    }
}

访问/c1接口设置Cookie,可在响应头Set-Cookie中看到设置的Cookie,浏览器会自动存储。访问/c2接口时,浏览器会自动通过请求头Cookie将Cookie携带到服务端。

优缺点

优点:是HTTP协议支持的技术,Set-Cookie响应头解析和Cookie请求头数据携带由浏览器自动完成,无需手动操作。
缺点:移动端APP(Android、IOS)无法使用;不安全,用户可禁用;不能跨域。
跨域指当前后端正反向代理服务器分开部署,且协议、IP或端口任意一个维度不同时,如前端部署在http://192.168.150.*200:80*,后端部署在http://192.168.150.*100:8080*,从前端页面访问后端接口即存在跨域操作,此时服务器设置的Cookie无法使用。

方案二 - Session
  • 实现思路:Session是服务端会话跟踪技术,底层基于Cookie实现。浏览器首次请求服务器时,服务器获取会话对象Session,若首次请求则自动创建,每个Session有唯一ID(即JSESSIONID)。服务器响应数据时,将Session的ID通过Set-Cookie响应头以Cookie形式(名为JSESSIONID)发送给浏览器,浏览器自动存储。后续每次请求 ,浏览器将Cookie携带到服务端,服务器通过JSESSIONID从众多Session中找到对应会话对象,实现同一次会话多次请求间的数据共享。
  • 代码测试
@Slf4j
@RestController
public class SessionController {

    @GetMapping("/s1")
    public Result session1(HttpSession session){
        log.info("HttpSession-s1: {}", session.hashCode());

        session.setAttribute("loginUser", "tom"); //往session中存储数据
        return Result.success();
    }

    @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);
    }
}

访问/s1接口,响应头会返回Set-Cookie,其中包含JSESSIONID。访问/s2接口,浏览器携带Cookie到服务端,服务器通过JSESSIONID找到对应Session。从控制台日志可看到两次请求获取的Session会话对象hashcode相同,且第二次请求获取到第一次请求存储在Session中的值。

  • 优缺点
    • 优点:数据存储在服务端,相对安全
    • 缺点服务器集群环境下无法直接使用;移动端APP(Android、IOS)因依赖Cookie无法使用;用户可禁用Cookie导致方案失效;不能跨域。在服务器集群环境中,用户登录请求可能被负载均衡服务器分配到不同Tomcat服务器,后续请求可能因找不到对应Session会话对象而出现问题。
方案三 - 令牌技术
  • 实现思路令牌本质是用户身份标识的字符串用户请求登录接口成功后,服务器·生成令牌作为合法身份凭证响应给前端。前端接收到令牌后,可存储在cookie或其他存储空间(如localStorage)。后续每次请求,将令牌携带到服务端,服务端校验令牌有效性,以判断用户是否登录。若需在同一次会话多次请求间共享数据,可将数据存储在令牌中
  • 优缺点
    • 优点:支持PC端和移动端;解决集群环境下的认证问题;减轻服务器存储压力,无需在服务器端存储。
    • 缺点:需要自行实现令牌的生成、传递和校验。

在现代企业开发中,令牌技术因具备诸多优势,成为使用最多的会话跟踪方案,而传统的Cookie和Session方案使用逐渐减少。因此,接下来也将采用令牌技术解决案例项目中的会话跟踪问题。


网站公告

今日签到

点亮在社区的每一天
去签到