ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

【网页会话技术jwt在springboot实现】

【网页会话技术jwt在springboot实现】

文章目录

  • 网页会话技术 JWT 在 Spring Boot 实现
    • 什么是JWT?
    • Spring Boot中实现JWT
      • 1. 引入依赖
      • 2. 创建JWT工具类
      • 3. 使用JWT进行认证
      • 4. 验证JWT

网页会话技术 JWT 在 Spring Boot 实现

什么是JWT?

JWT是一种紧凑且自包含的方式,用于在各方之间安全地传输信息。它可以包含用户的身份信息以及其他相关信息,如权限和有效期。JWT的结构通常由三部分组成:Header(头部)、Payload(负载)和Signature(签名)。

  • Header(头部) 包含了令牌的元数据,如令牌的类型和使用的签名算法。
  • Payload(负载) 包含了实际的数据,如用户ID、用户名和过期时间。
  • Signature(签名) 是对Header和Payload的签名,用于验证令牌的真实性和完整性。

Spring Boot中实现JWT

1. 引入依赖

<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.11.2</version>
</dependency>
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-impl</artifactId><version>0.11.2</version><scope>runtime</scope>
</dependency>
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-jackson</artifactId><version>0.11.2</version><scope>runtime</scope>
</dependency>

2. 创建JWT工具类

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.stereotype.Component;
import java.util.Date;@Component
public class JwtUtils {private final String secret = "your-secret-key";public String generateToken(String username) {Date now = new Date();Date expiration = new Date(now.getTime() + 86400000); // 24小时后过期return Jwts.builder().setSubject(username).setIssuedAt(now).setExpiration(expiration).signWith(SignatureAlgorithm.HS512, secret).compact();}public String getUsernameFromToken(String token) {Claims claims = Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody();return claims.getSubject();}public boolean validateToken(String token) {try {Jwts.parser().setSigningKey(secret).parseClaimsJws(token);return true;} catch (Exception e) {return false;}}
}

3. 使用JWT进行认证

@RestController
@RequestMapping("/auth")
public class AuthController {@Autowiredprivate JwtUtils jwtUtils;@PostMapping("/login")public ResponseEntity<String> login(@RequestBody LoginRequest loginRequest) {// 根据用户名和密码进行认证,如果认证成功,生成JWT并返回给客户端String token = jwtUtils.generateToken(loginRequest.getUsername());return ResponseEntity.ok(token);}
}

4. 验证JWT

@RestController
@RequestMapping("/secure")
public class SecureController {@Autowiredprivate JwtUtils jwtUtils;@GetMapping("/data")public ResponseEntity<String> secureData(@RequestHeader("Authorization") String authHeader) {String token = authHeader.substring(7); // 剥离Bearer前缀if (jwtUtils.validateToken(token)) {String username = jwtUtils.getUsernameFromToken(token);// 根据用户名获取受保护的数据// 返回受保护数据return ResponseEntity.ok("Welcome, " + username + "! This is secure data.");} else {return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Invalid token.");}}
}
返回列表