回顾JWT是什么?JWT的用途。明天项目中有用到代码
时间: 2023-07-04 17:17:45 浏览: 77
Django项目中使用JWT的实现代码
下面是一个使用JWT实现身份验证和授权的示例代码:
1. 引入依赖
在pom.xml中添加以下依赖:
```xml
<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工具类
```java
public class JwtUtils {
private static final String SECRET_KEY = "my_secret_key"; // 密钥
private static final long EXPIRATION_TIME = 60 * 60 * 1000; // 过期时间为1小时
/**
* 生成JWT
* @param subject 载荷中的信息
* @return JWT
*/
public static String generateJwt(String subject) {
Date now = new Date();
Date expiration = new Date(now.getTime() + EXPIRATION_TIME);
return Jwts.builder()
.setSubject(subject)
.setIssuedAt(now)
.setExpiration(expiration)
.signWith(SignatureAlgorithm.HS256, SECRET_KEY)
.compact();
}
/**
* 解析JWT
* @param jwt JWT
* @return 载荷中的信息
*/
public static String parseJwt(String jwt) {
try {
Claims claims = Jwts.parser()
.setSigningKey(SECRET_KEY)
.parseClaimsJws(jwt)
.getBody();
return claims.getSubject();
} catch (Exception e) {
return null;
}
}
}
```
在上面的代码中,我们使用了jjwt库来生成和解析JWT。
3. 在登录接口中生成JWT并返回给客户端
```java
@PostMapping("/login")
public ResponseEntity<String> login(@RequestParam String username, @RequestParam String password) {
// 验证用户名和密码
if (!isValidUser(username, password)) {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Invalid username or password");
}
// 生成JWT并返回给客户端
String jwt = JwtUtils.generateJwt(username);
return ResponseEntity.ok().header(HttpHeaders.AUTHORIZATION, "Bearer " + jwt).build();
}
```
在上面的代码中,我们在登录成功后生成了一个JWT,并将其作为Authorization头的值设置在响应头中返回给客户端。
4. 在需要身份验证和授权的接口中验证JWT
```java
@GetMapping("/info")
public ResponseEntity<String> getInfo(@RequestHeader(name = HttpHeaders.AUTHORIZATION) String authorization) {
// 验证Authorization头是否合法
String jwt = StringUtils.removeStart(authorization, "Bearer ");
String username = JwtUtils.parseJwt(jwt);
if (StringUtils.isBlank(username)) {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
}
// 根据用户名获取用户信息并返回
UserInfo userInfo = getUserInfo(username);
return ResponseEntity.ok(userInfo.toString());
}
```
在上面的代码中,我们首先从Authorization头中获取JWT,并使用JwtUtils工具类来解析JWT。如果JWT合法,则验证通过,否则返回401 Unauthorized。之后,我们根据用户名获取用户信息并返回。
阅读全文