首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

前後端分離架構下的 Java 後端實戰:Spring Boot + JWT 無狀態認證完整實現

     編輯:Java 相關知識

前言

前後端分離核心在於**後端無狀態化**:不再依賴 Session 儲存用戶狀態,而是簽發自包含的 JWT (JSON Web Token),前端攜帶 Token 請求,後端驗證解析即可識別用戶。本文基於 Spring Boot 2.x/3.x 實現完整認證流程:登入簽發 → 過濾器驗證 → 權限控制 → 跨域支援。

技術棧

  • Spring Boot 2.7+ / 3.x
  • Spring Security 5/6
  • JJWT 0.11+ (JWT 實現)
  • Maven / Gradle

1. 依賴配置 (pom.xml)

@Component
public class JwtUtil {
    private final String secret = "base64EncodedSecretKeyAtLeast256BitsLongForHS256"; // 生產環境從配置讀取
    private final long expirationMs = 3600_000; // 1小時

    public String generateToken(String username, String roles) {
        return Jwts.builder()
            .setSubject(username)
            .claim("roles", roles)
            .setIssuedAt(new Date())
            .setExpiration(new Date(System.currentTimeMillis() + expirationMs))
            .signWith(Keys.hmacShaKeyFor(secret.getBytes()), SignatureAlgorithm.HS256)
            .compact();
    }

    public Claims parseToken(String token) {
        return Jwts.parserBuilder()
            .setSigningKey(Keys.hmacShaKeyFor(secret.getBytes()))
            .build()
            .parseClaimsJws(token)
            .getBody();
    }

    public boolean validateToken(String token) {
        try { parseToken(token); return true; }
        catch (JwtException | IllegalArgumentException e) { return false; }
    }
}

3. 登入控制器:簽發 Token

 login(@RequestParam String username, @RequestParam String password) {
        // 實際應查詢資料庫驗證密碼 (BCrypt)
        if (!"admin".equals(username) || !"1234".equals(password)) {
            throw new BadCredentialsException("用戶名或密碼錯誤");
        }
        String token = jwtUtil.generateToken(username, "USER,ADMIN");
        return Map.of("token", token);
    }
}

4. JWT 認證過濾器 (核心)


5. Security 配置:啟用過濾器、保護路徑、CORS


6. 業務控制器:權限控制示例


7. 前端調用流程 (Vue/React 通用)

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved