社团网站建设的功能定位阳江网站建设 公司
2026/3/29 17:38:52 网站建设 项目流程
社团网站建设的功能定位,阳江网站建设 公司,福州最好的网站建设服务商,用flash做的网站展示视频看了几百小时还迷糊#xff1f;关注我#xff0c;几分钟让你秒懂#xff01; 你是否经常听到这些词#xff1a; “我们用 JWT 做登录认证”“前端把 token 放在 Authorization 头里”“JWT 无状态#xff0c;适合分布式系统” 但你真的理解 JWT 到底是什么#xff…视频看了几百小时还迷糊关注我几分钟让你秒懂你是否经常听到这些词“我们用 JWT 做登录认证”“前端把 token 放在 Authorization 头里”“JWT 无状态适合分布式系统”但你真的理解JWT 到底是什么它怎么工作和 Session 有什么区别吗今天我们就用通俗语言 图解 Spring Boot 代码实战带你从零彻底搞懂 JWT 一、一句话解释 JWTJWTJSON Web Token是一种开放标准RFC 7519用于在网络应用间安全地传递“声明”claims的紧凑、自包含令牌。简单说JWT 就是一个加密的字符串里面包含了用户身份信息服务器不用查数据库就能验证你是谁 二、JWT 长什么样一个典型的 JWT 看起来像这样eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ. SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c它由三部分组成用点.分隔部分说明是否可读Header头部算法 类型Base64 可解码Payload载荷用户数据如 ID、角色、过期时间Base64 可解码Signature签名用于验证令牌是否被篡改不可逆✅注意JWT 默认是 Base64 编码不是加密任何人都能解码看到内容 安全靠的是签名Signature防止内容被篡改。 三、三部分详解附解码示例1. Header头部{ alg: HS256, typ: JWT }alg签名算法如 HS25 sH A256、RS256typ令牌类型固定为 JWT2. Payload载荷— 存放用户信息的地方{ sub: 1234567890, // 主题通常是用户ID name: John Doe, admin: true, iat: 1516239022, // 签发时间时间戳 exp: 1516242622 // 过期时间重要 }⚠️不要在 Payload 里放敏感信息如密码、手机号因为它是明文Base64 可解码3. Signature签名— 安全的核心服务器用密钥 算法对Header Payload进行签名HMACSHA256( base64UrlEncode(header) . base64UrlEncode(payload), secretKey )客户端无法伪造签名不知道 secretKey服务器收到 JWT 后会重新计算签名比对是否一致只要 Payload 被改签名就失效 四、JWT 认证流程图解✅ 整个过程服务器无需存储 session真正“无状态”⚖️ 五、JWT vs Session传统方案特性JWTSession存储位置客户端LocalStorage/Cookie服务端内存/Redis状态无状态Stateless有状态需维护 session扩展性天然支持分布式需共享 session如 Redis安全性依赖签名防篡改依赖 session ID 随机性登出难需黑名单或短期过期容易删 session 即可传输大小较大含用户数据小只传 session IDJWT 适合API 服务、微服务、移动端Session 适合传统 Web 应用、需要强登出控制的系统 六、Spring Boot 实战手写 JWT 登录1. 添加依赖dependency groupIdio.jsonwebtoken/groupId artifactIdjjwt-api/artifactId version0.11.5/version /attribute dependency groupIdio.jsonwebtoken/groupId artifactIdjjwt-impl/artifactId version0.11.5/version scoperuntime/scope /dependency dependency groupIdio.jsonwebtoken/groupId artifactIdjjwt-jackson/artifactId version0.11.5/version scoperuntime/scope /dependency2. JWT 工具类Component public class JwtUtil { private String secret MySecretKey123!#; // 生产环境应配置在 application.yml private long expiration 86400000; // 24小时 public String generateToken(String userId) { return Jwts.builder() .setSubject(userId) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis() expiration)) .signWith(SignatureAlgorithm.HS256, secret) .compact(); } public String getUserIdFromToken(String token) { return Jwts.parser() .setSigningKey(secret) .parseClaimsJws(token) .getBody() .getSubject(); } public boolean validateToken(String token) { try { Jwts.parser().setSigningKey(secret).parseClaimsJws(token); return true; } catch (Exception e) { return false; } } }3. 登录接口RestController public class AuthController { Autowired private JwtUtil jwtUtil; PostMapping(/login) public ResponseEntity? login(RequestBody LoginRequest req) { // 模拟验证账号密码实际应查数据库 if (admin.equals(req.getUsername()) 123456.equals(req.getPassword())) { String token jwtUtil.generateToken(10001); return ResponseEntity.ok(Map.of(token, token)); } return ResponseEntity.status(401).body(账号或密码错误); } }4. 拦截器验证 JWTpublic class JwtInterceptor implements HandlerInterceptor { Autowired private JwtUtil jwtUtil; Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { String authHeader request.getHeader(Authorization); if (authHeader ! null authHeader.startsWith(Bearer )) { String token authHeader.substring(7); if (jwtUtil.validateToken(token)) { // 可将用户ID存入 ThreadLocal 或 Request Attribute return true; } } response.setStatus(401); return false; } }注册拦截器Configuration public class WebConfig implements WebMvcConfigurer { Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new JwtInterceptor()) .addPathPatterns(/api/**) .excludePathPatterns(/login); } }⚠️ 七、JWT 的致命缺点 注意事项❌ 1.无法主动登出除非用黑名单JWT 一旦签发在过期前一直有效即使用户点击“退出”旧 token 仍可使用解决方案设置较短过期时间如 15 分钟 刷新令牌Refresh Token维护一个 Redis 黑名单记录已登出的 token。❌ 2.Payload 不是加密的所有人都能解码看到内容永远不要放密码、身份证号等敏感信息❌ 3.密钥泄露 全盘崩溃如果secretKey泄露攻击者可伪造任意用户 token必须严格保管密钥✅ 最佳实践建议项目建议过期时间Access Token 15~30 分钟配合 Refresh Token存储位置Web 用 HttpOnly Cookie防 XSSApp 用安全存储传输协议必须 HTTPS密钥管理用配置中心或环境变量不要硬编码 总结JWT Header Payload Signature自包含、无状态、适合分布式不是加密而是签名防篡改无法主动登出是最大短板Spring Boot 集成简单但要注意安全细节掌握 JWT你就掌握了现代 API 认证的“通行证”视频看了几百小时还迷糊关注我几分钟让你秒懂

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询