springboot的JWT代码实现
时间: 2023-10-12 19:16:47 浏览: 89
在SpringBoot中使用JWT的实现方法
好的,以下是一个简单的基于Spring Boot和JWT实现用户认证和授权的示例代码:
首先,我们需要添加以下依赖到pom.xml文件中:
```xml
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
```
然后,我们需要定义一个JWT工具类来生成和验证JWT令牌:
```java
import io.jsonwebtoken.*;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@Component
public class JwtUtils {
private static final String SECRET_KEY = "secret"; // 秘钥
private static final long EXPIRATION_TIME = 864000000L; // 过期时间,这里设置为10天
// 生成JWT令牌
public String generateToken(String username) {
Map<String, Object> claims = new HashMap<>();
claims.put("username", username);
return Jwts.builder()
.setClaims(claims)
.setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME))
.signWith(SignatureAlgorithm.HS512, SECRET_KEY)
.compact();
}
// 验证JWT令牌
public boolean validateToken(String token) {
try {
Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token);
return true;
} catch (SignatureException ex) {
System.out.println("Invalid JWT signature");
} catch (MalformedJwtException ex) {
System.out.println("Invalid JWT token");
} catch (ExpiredJwtException ex) {
System.out.println("Expired JWT token");
} catch (UnsupportedJwtException ex) {
System.out.println("Unsupported JWT token");
} catch (IllegalArgumentException ex) {
System.out.println("JWT claims string is empty.");
}
return false;
}
// 从JWT令牌中获取用户名
public String getUsernameFromToken(String token) {
Claims claims = Jwts.parser()
.setSigningKey(SECRET_KEY)
.parseClaimsJws(token)
.getBody();
return claims.get("username").toString();
}
}
```
接下来,我们需要定义一个登录接口来验证用户身份并生成JWT令牌:
```java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/auth")
public class AuthController {
@Autowired
private JwtUtils jwtUtils;
@PostMapping("/login")
public String login(@RequestParam String username, @RequestParam String password) {
// TODO: 实现用户验证逻辑
// 如果用户名和密码验证通过,生成JWT令牌并返回给客户端
String token = jwtUtils.generateToken(username);
return token;
}
}
```
最后,我们需要在需要进行用户认证和授权的接口中验证JWT令牌:
```java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/user")
public class UserController {
@Autowired
private JwtUtils jwtUtils;
@GetMapping("/info")
public String getInfo(@RequestHeader("Authorization") String token) {
if (!token.startsWith("Bearer ")) {
return "Invalid token format";
}
String jwtToken = token.substring(7);
if (!jwtUtils.validateToken(jwtToken)) {
return "Invalid token";
}
String username = jwtUtils.getUsernameFromToken(jwtToken);
// TODO: 根据用户名获取用户信息并返回给客户端
return "Hello, " + username;
}
}
```
以上是一个简单的基于Spring Boot和JWT实现用户认证和授权的示例代码,供参考。
阅读全文