登录与登录校验:Web安全核心解析

文章目录


前言

登录与登录校验是Web开发中的核心功能,涉及用户身份验证与权限控制。通过查询数据库验证用户凭据,并结合会话技术(如Cookie、Session或令牌)实现状态管理,确保系统安全性与用户体验。


登录与登录校验

一、登录功能

(一)登录成功判定

只有用户名和密码都输入正确,登录才成功;否则登录失败。

(二)本质

登录功能本质是查询操作,即依据用户名和密码查询员工信息。

(三)代码实现流程(以 Java + Spring Boot 为例)
  1. Controller 层
java 复制代码
/**
 * 登录Controller
 */
@Slf4j
@RestController
public class LoginController {
    @Autowired
    private EmpService empService;
    /**
     * 登录
     * @return
     */
    @PostMapping("/login")
    public Result login(@RequestBody Emp emp){
        log.info("用户登录:{}",emp);
        LoginInfo info=empService.login(emp);
        if (info==null) {
            return Result.error("用户名或密码错误");
        }
        return Result.success(info)                                                                                                         ;
    }
}

Controller 层主要负责接收前端传来的登录请求参数(用户名和密码),然后调用 Service 层的方法进行登录验证,最后根据验证结果返回相应的结果。

2. Service 层

java 复制代码
@Service
public class LoginServiceImpl implements LoginService {

    @Autowired
    private EmpMapper empMapper;

    @Override
    public Emp login(String username, String password) {
        // 调用 Mapper 层方法,根据用户名和密码查询员工信息
        Emp emp = empMapper.findByUsernameAndPassword(username, password);
        return emp;
    }
}

// Service 接口
interface LoginService {
    Emp login(String username, String password);
}

Service 层根据传入的用户名和密码,调用 Mapper 层方法查询员工信息,并将查询结果返回给 Controller 层。

3. Mapper 层

java 复制代码
/**
     * 根据用户名和密码查询员工信息
     * @param emp
     * @return
     */
    @Select("select id,username,name from emp where username=#{username} and password=#{password}")
    Emp selectByUserNameAndPassword(Emp emp);

Mapper 层通过执行 SQL 语句select * from emp where username = #{username} and password = #{password},从数据库中查询对应的员工信息。

二、登录校验

(一)问题与需求
  • 问题:未登录时,能直接访问部门管理、员工管理等后台功能。

  • 需求:只有员工登录成功,才允许访问后台系统数据。

(二)校验思路

利用统一拦截 (过滤器 Filter、拦截器 Interceptor)结合会话技术来实现。用户登录成功后会生成登录标记(基于会话技术),后续每次请求,统一拦截组件会获取该标记,判断用户是否已登录,进而决定是否允许访问后台功能。

三、会话技术

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

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

会话跟踪方案:

•客户端会话跟踪技术:Cookie

•服务端会话跟踪技术:Session

•令牌技术

(一)Cookie 示例(客户端会话跟踪)
java 复制代码
    //设置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();
    }
  • 原理:通过响应头 Set - Cookie 向客户端设置 Cookie,客户端后续请求时通过请求头 Cookie 携带 Cookie,以此实现会话跟踪。

  • 优缺点

  • 优点:是 HTTP 协议支持的技术。

  • 缺点:移动端 APP 无法使用 Cookie;不安全,用户可自行禁用 Cookie;Cookie 不能跨域(跨域从协议、IP / 域名、端口三个维度区分)。

(二)Session 示例(服务端会话跟踪)
java 复制代码
@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(HttpSession session){
        log.info("HttpSession-s2: {}", session.hashCode());

        Object loginUser = session.getAttribute("loginUser"); //从session中获取数据
        log.info("loginUser: {}", loginUser);
        return Result.success(loginUser);
    }

Session 是服务端的会话跟踪技术,将用户登录信息存储在服务端 Session 中,后续请求通过获取 Session 中的信息判断用户是否登录。

(三)令牌技术

1.令牌会话跟踪方案的优缺点 ?

优点:

  • 支持PC端、移动端
  • 决集群环境下的认证问题
  • 减轻服务器端存储压力

缺点:需要自己实现

总结

登录功能本质是通过数据库查询验证用户身份,而登录校验则依赖统一拦截机制与会话跟踪技术(如Cookie、Session或JWT令牌)实现访问控制。每种技术各有优劣:

  • Cookie 简单但受限于客户端支持与安全性;
  • Session 服务端存储更安全,但需解决集群环境问题;
  • 令牌技术 兼容多端且无状态,适合分布式系统,但需自行实现逻辑。

合理选择方案需结合业务场景,平衡安全、性能与扩展性需求。

相关推荐
野生的码农5 小时前
码农的妇产科实习记录
android·java·人工智能
毕设源码-赖学姐6 小时前
【开题答辩全过程】以 高校人才培养方案管理系统的设计与实现为例,包含答辩的问题和答案
java
一起努力啊~6 小时前
算法刷题-二分查找
java·数据结构·算法
小途软件6 小时前
高校宿舍访客预约管理平台开发
java·人工智能·pytorch·python·深度学习·语言模型
J_liaty6 小时前
Java版本演进:从JDK 8到JDK 21的特性革命与对比分析
java·开发语言·jdk
+VX:Fegn08956 小时前
计算机毕业设计|基于springboot + vue律师咨询系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
daidaidaiyu6 小时前
一文学习和实践 当下互联网安全的基石 - TLS 和 SSL
java·netty
hssfscv7 小时前
Javaweb学习笔记——后端实战2_部门管理
java·笔记·学习
白帽子黑客罗哥7 小时前
不同就业方向(如AI、网络安全、前端开发)的具体学习路径和技能要求是什么?
人工智能·学习·web安全
NE_STOP7 小时前
认识shiro
java