文章目录
前言
登录与登录校验是Web开发中的核心功能,涉及用户身份验证与权限控制。通过查询数据库验证用户凭据,并结合会话技术(如Cookie、Session或令牌)实现状态管理,确保系统安全性与用户体验。
登录与登录校验
一、登录功能
(一)登录成功判定
只有用户名和密码都输入正确,登录才成功;否则登录失败。
(二)本质
登录功能本质是查询操作,即依据用户名和密码查询员工信息。
(三)代码实现流程(以 Java + Spring Boot 为例)
- 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 服务端存储更安全,但需解决集群环境问题;
- 令牌技术 兼容多端且无状态,适合分布式系统,但需自行实现逻辑。
合理选择方案需结合业务场景,平衡安全、性能与扩展性需求。