要在Spring Boot中进行JWT校验,你需要遵循以下步骤:
1. 添加依赖
在你的pom.xml文件中添加以下依赖:
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version>
</dependency>
2. 创建JWT工具类
创建一个名为JwtUtil的工具类,用于生成和解析JWT令牌。
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.JwtException;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.util.StringUtils;import java.util.Date;public class JwtUtil {private static final String SECRET_KEY = "your_secret_key"; // 替换为你自己的密钥private static final long EXPIRATION_TIME = 86400000L; // 设置过期时间,例如1天(毫秒)public static String generateToken(String username) {return Jwts.builder().setSubject(username).setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME)).signWith(SignatureAlgorithm.HS512, SECRET_KEY).compact();}public static Claims parseToken(String token) {try {Jws<Claims> claimsJws = Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token);return claimsJws.getBody();} catch (JwtException e) {throw new RuntimeException("Invalid token");}}public static boolean validateToken(String token) {try {Jws<Claims> claimsJws = Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token);return true;} catch (JwtException e) {return false;}}
}
3. 在Controller中使用JWT工具类
在你的Controller中,使用JwtUtil工具类来验证请求头中的JWT令牌。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyController {@GetMapping("/secure")public String secureEndpoint(@RequestHeader("Authorization") String token) {if (!JwtUtil.validateToken(token)) {return "Invalid token";}Claims claims = JwtUtil.parseToken(token);String username = claims.getSubject();// 你的业务逻辑return "Hello, " + username;}
}
现在,当用户访问/secure端点时,系统会检查请求头中的JWT令牌是否有效。如果令牌无效,将返回"Invalid token"。如果令牌有效,将返回用户的用户名。