springboot生成与解析token的代码
时间: 2023-06-09 19:08:50 浏览: 166
好的,关于生成和解析token的代码,你需要使用Spring Security这个框架来辅助你实现。
首先,在你的pom.xml中添加Spring Security的依赖:
```
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-jwt</artifactId>
<version>1.1.1.RELEASE</version>
</dependency>
```
然后,创建一个JwtUtils工具类,实现token的生成和解析功能。示例代码如下:
```
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.impl.DefaultClaims;
import org.springframework.security.core.userdetails.UserDetails;
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 CLAIM_KEY_USERNAME = "sub";
private static final String CLAIM_KEY_CREATED = "created";
private static final String TOKEN_SECRET = "your_token_secret_here";
private static final long TOKEN_EXPIRATION = 3600;
public String generateToken(UserDetails userDetails) {
Map<String, Object> claims = new HashMap<>();
claims.put(CLAIM_KEY_USERNAME, userDetails.getUsername());
claims.put(CLAIM_KEY_CREATED, new Date());
return Jwts.builder().setClaims(claims).setExpiration(generateExpirationDate())
.signWith(SignatureAlgorithm.HS512, TOKEN_SECRET).compact();
}
private Date generateExpirationDate() {
return new Date(System.currentTimeMillis() + TOKEN_EXPIRATION * 1000);
}
public String getUsernameFromToken(String token) {
Claims claims = getClaimsFromToken(token);
return claims.getSubject();
}
public boolean validateToken(String token, UserDetails userDetails) {
String username = getUsernameFromToken(token);
return username.equals(userDetails.getUsername()) && !isTokenExpired(token);
}
private Claims getClaimsFromToken(String token) {
Claims claims;
try {
claims = Jwts.parser().setSigningKey(TOKEN_SECRET).parseClaimsJws(token).getBody();
} catch (Exception e) {
claims = new DefaultClaims();
}
return claims;
}
private boolean isTokenExpired(String token) {
final Date expiration = getExpirationDateFromToken(token);
return expiration.before(new Date());
}
private Date getExpirationDateFromToken(String token) {
final Claims claims = getClaimsFromToken(token);
return claims.getExpiration();
}
}
```
这个示例代码中,我们使用了HS512签名算法,并且设置了token过期时间为3600秒。
接下来,在你的登录方法中,调用JwtUtils工具类的generateToken方法来生成token,将token返回给客户端使用。
在你的后续请求中,将token添加到Authorization头中,然后在你的请求过滤器中,使用JwtUtils工具类的getUsernameFromToken方法来获取用户名,从而完成用户身份的验证。
以上便是生成和解析token的简单示例,希望能够帮到你。
阅读全文