JWT代码示例
时间: 2023-06-30 17:15:44 浏览: 88
以下是一个使用JWT进行服务间调用鉴权的代码示例:
首先,在Spring Boot应用的pom.xml文件中添加JWT的依赖:
```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>
```
然后,我们需要编写一个JWT工具类来生成和解析JWT。
```java
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import java.security.Key;
import java.util.Date;
public class JwtUtils {
private static final Key KEY = Keys.secretKeyFor(SignatureAlgorithm.HS256);
private static final long EXPIRATION_TIME = 3600000; // 1 hour
public static String generateToken(String username, String role) {
return Jwts.builder()
.setSubject(username)
.claim("role", role)
.setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME))
.signWith(KEY)
.compact();
}
public static Claims parseToken(String token) {
return Jwts.parserBuilder()
.setSigningKey(KEY)
.build()
.parseClaimsJws(token)
.getBody();
}
}
```
上面的代码中,我们使用了jjwt库来生成和解析JWT,其中包括一个密钥和过期时间等信息。
接下来,我们可以在服务的Controller中使用@PreAuthorize注解进行鉴权控制,并且从请求头中获取JWT并解析出用户信息。
```java
@RestController
@RequestMapping("/api")
public class MyController {
@GetMapping("/test")
public String test(@RequestHeader("Authorization") String token) {
Claims claims = JwtUtils.parseToken(token.substring(7));
String username = claims.getSubject();
String role = (String) claims.get("role");
// TODO: 鉴权控制
return "Hello, world!";
}
}
```
上面的代码中,我们从请求头中获取JWT,并且使用JwtUtils工具类解析出用户信息。
最后,我们需要在应用的配置文件中设置JWT的密钥和过期时间等信息。
```yaml
jwt:
secret: my-secret-key
expiration: 3600
```
这样,我们就可以使用JWT实现服务间调用鉴权了。
阅读全文