小菜鸟

java菜鸟号正在起航

JWT(JSON Web Token)详解

JWT 是一种基于 JSON 的轻量级身份认证和授权规范,广泛应用于分布式系统、前后端分离架构中,用于在客户端和服务端之间安全传递信息。下面将从 JWT 的核心概念、工作流程、技术细节及应用场景等方面进行详细介绍。

JWT 的核心价值:为何需要它?

在传统的 Web 开发中,常用Session+Cookie实现身份认证,但这种方式存在明显局限性:

  • 服务端存储压力:Session 需要服务端保存用户状态,用户量增大时会占用大量服务器资源。
  • 集群部署难题:Session 存储在单个服务器上,集群环境下需额外配置(如 Session 共享、Redis 同步)才能保证用户跨节点访问时的身份一致性。
  • 违背无状态原则:Restful API 强调服务端无状态,Session 机制与这一理念冲突。

JWT 的出现正是为了解决这些问题,其核心优势在于:

  • 无状态:服务端无需保存用户状态,所有信息都封装在 Token 中。
  • 跨域 / 跨服务支持:Token 可在不同域名、不同服务间传递,适合分布式系统。
  • 自包含:Token 本身包含用户身份信息,减少服务端查询数据库的次数。

JWT 的工作流程

JWT 的身份认证流程可分为以下步骤:

阅读全文 »

Linux 系统资源监控命令大全:从负载分析到性能调优

在 Linux 系统管理中,实时掌握系统资源(CPU、内存、磁盘、网络)的使用状态是排查性能问题、优化系统的基础。本文将系统介绍常用的系统资源监控命令,涵盖负载查看、CPU / 内存 / 磁盘 / 网络分析等核心场景,帮助你全面了解系统运行状态。

系统整体负载监控

w:查看当前系统负载概览

w 命令可以快速了解系统的整体负载、登录用户及进程活动,是系统监控的 “第一站”。

w

系统当前负载

输出解析

  • 第一行:系统当前时间、运行时长、登录用户数、1/5/15 分钟平均负载(核心指标)。
    • 平均负载:单位时间内等待 CPU 处理的任务数,理想值 ≤ CPU 核心数(如 4 核 CPU 负载≤4 属正常)。
  • 第二行及以后:当前登录用户的信息(用户名、登录终端、登录时间、执行的命令等)。

uptime:精简版系统运行状态

uptime 仅输出 w 命令的第一行信息,适合快速查看系统运行时间和平均负载。

uptime
# 示例输出:16:49:00 up 13 days, 23:15,  2 users,  load average: 0.01, 0.04, 0.04
  • 用途:快速判断系统是否处于高负载状态(对比 1/5/15 分钟负载趋势,判断负载是上升还是下降)。

系统资源细化分析工具

vmstat:全面监控进程、内存、IO 和 CPU

vmstat(Virtual Memory Statistics)是分析系统瓶颈的核心工具,可实时输出进程、内存、交换分区、IO 和 CPU 的详细数据。

阅读全文 »

Java Web 请求处理:HttpServletRequest 详解

在 Java Web 开发中,客户端的 HTTP 请求由 HttpServletRequest 对象封装,它提供了丰富的方法用于获取请求行、请求头、请求参数等信息。本文将系统梳理 HttpServletRequest 的核心功能,包括请求行解析、请求头获取、参数处理及会话管理等,帮助开发者高效处理客户端请求。

HttpServletRequest 概述

HttpServletRequestServletRequest 接口的子接口,专门用于处理 HTTP 协议的请求。它由 Servlet 容器创建并传递给 service() 方法,包含客户端请求的所有信息(如 URL、参数、 headers 等)。

// HttpServlet 中处理请求的方法
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
    // 通过 req 处理请求...
}

请求行信息获取

HTTP 请求行由请求方法(如 GET/POST)、请求 URI协议版本组成(如 GET /index.jsp HTTP/1.1)。HttpServletRequest 提供以下方法解析请求行:

方法 作用描述 示例(假设请求为 GET /app/user?id=1 HTTP/1.1
getMethod() 获取请求方法(GET/POST/PUT/DELETE 等) GET
getProtocol() 获取协议版本(如 HTTP/1.1 HTTP/1.1
getRequestURI() 获取请求 URI(主机名后的路径部分) /app/user
getRequestURL() 获取完整请求 URL(包含协议、主机、端口和路径) http://localhost:8080/app/user
getQueryString() 获取 URL 中的查询参数(? 后的部分) id=1
getContextPath() 获取当前 Web 应用的上下文路径(部署路径) /app
getServletPath() 获取 Servlet 映射的路径 /user
getPathInfo() 获取 URL 中 Servlet 路径后的额外路径信息(无则为 null null(若请求为 /app/user/1,则返回 /1

网络连接信息

获取客户端与服务器的网络连接细节,如 IP、端口等:

阅读全文 »

Linux 后台运行命令:从基础到进阶

在 Linux 中,将命令放在后台运行是提高工作效率的重要技巧,尤其适合处理耗时任务(如程序部署、数据备份等)。本文将详细介绍后台运行命令的方法、进程管理及持久化方案。

基础:用 & 让命令后台运行

最简单的后台运行方式是在命令末尾添加 &,使命令脱离当前终端的直接控制:

# 示例:后台运行 Java 程序
java -jar test.jar &

特点:

  • 命令立即返回终端控制权,可继续输入其他命令;
  • 命令输出(stdout/stderr)仍会显示在当前终端;
  • 进程与终端会话绑定,关闭终端会导致进程终止(收到 SIGHUP 信号)。

管理后台进程:jobsfg/bg

使用 & 启动的后台进程属于当前终端的 “作业(job)”,可通过以下命令管理:

查看后台进程

jobs [-l]
  • 不加参数:显示作业编号、状态(运行中 Running 或停止 Stopped)和命令;
  • -l:额外显示进程 PID(进程 ID),便于后续操作(如终止进程)。
阅读全文 »

Nginx 重定向配置详解:return 与 rewrite 的实战指南

重定向是 Web 服务中常见的功能,用于将客户端请求从一个 URL 转发到另一个 URL(如域名迁移、路径调整、HTTPS 强制跳转等)。Nginx 通过returnrewrite两种方式实现重定向,各有适用场景。本文详细讲解两种方式的语法、区别及实战案例,帮助灵活配置重定向规则。

重定向基础:状态码与场景

重定向通过 HTTP 状态码告知客户端跳转类型,常用状态码:

  • 301 Moved Permanently:永久重定向(客户端会缓存跳转关系,适合域名更换);
  • 302 Found:临时重定向(客户端不缓存,适合临时维护、活动页面跳转);
  • 307 Temporary Redirect:临时重定向(严格保留请求方法,如 POST 请求不会转为 GET);
  • 308 Permanent Redirect:永久重定向(严格保留请求方法)。

return指令:简单直接的重定向

return指令用于直接返回状态码和跳转 URL,语法简洁,适合固定规则的重定向(如域名跳转、HTTPS 强制跳转)。

1. 语法格式

阅读全文 »
0%