请详细讲解Springboot使用token
时间: 2024-05-08 20:20:06 浏览: 91
Springboot使用token是指在web应用中,为保证身份验证和授权,通过一种令牌授权方式,控制用户对系统资源的访问。在Springboot中,可以使用JWT(JSON Web Token)实现token的使用。
首先,在Springboot应用中,需要引入相关的JWT依赖库。在Maven项目中,可以在pom.xml文件中添加以下依赖:
```
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
```
然后,在程序中可以定义一个TokenUtils工具类来生成和验证token,代码如下:
```
@Component
public class TokenUtils {
// 生成token
public String createToken(String username, String password) {
// 先定义过期时间
Date expireDate = new Date(System.currentTimeMillis() + 60 * 60 * 1000);
// 创建jwtBuilder对象
JwtBuilder jwtBuilder = Jwts.builder()
.setSubject(username) // 设置用户名作为主题
.setExpiration(expireDate) // 设置过期时间
.signWith(SignatureAlgorithm.HS512, "secret"); // 设置密钥
// 加入自定义的claims
Map<String, Object> claims = new HashMap<>();
// 在claims中加入用户密码
claims.put("password", password);
// 在jwtBuilder中加入claims
jwtBuilder.addClaims(claims);
// 生成jwt字符串
String token = jwtBuilder.compact();
return token;
}
// 验证token
public Claims checkToken(String token) {
try {
// 验证token并返回claims对象
Claims claims = Jwts.parser()
.setSigningKey("secret") // 设置密钥
.parseClaimsJws(token)
.getBody();
return claims;
} catch (Exception e) {
// 如果验证失败,抛出异常
throw new RuntimeException("token验证失败");
}
}
}
```
在上述代码中,createToken方法用于生成token,checkToken方法用于验证token是否合法。在生成token时,需要指定用户的用户名和密码,设置过期时间和密钥,并将这些信息加入到jwtBuilder中生成token字符串。在验证token时,需要使用密钥对token进行解码,并返回claims对象。
最后,在进行用户身份验证时,可以通过拦截器来验证token。例如,在控制器方法中加入@JwtTokenRequired注解,使用拦截器验证token是否合法,代码如下:
```
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/login")
public String login(String username, String password) {
if (userService.checkUser(username, password)) {
// 登录成功,生成token
String token = TokenUtils.createToken(username, password);
return token;
} else {
// 登录失败
return "登录失败";
}
}
@GetMapping("/info")
@JwtTokenRequired // 验证token
public String getUserInfo() {
return "用户信息";
}
}
```
在上述代码中,@JwtTokenRequired注解表示需要验证token。在具体的拦截器中,可以通过TokenUtils提供的checkToken方法验证token是否合法,并根据验证结果进行相应的操作。
阅读全文