SpringBoot 使用jwt登录
时间: 2023-12-03 19:56:02 浏览: 86
使用JWT实现Spring Boot的登录认证,可以遵循以下步骤:
1.添加依赖
在pom.xml文件中添加以下依赖:
```
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
```
2.创建User类
创建User类,用于存储用户信息,如下所示:
```
public class User {
private String username;
private String password;
// getters and setters
}
```
3.创建JWT工具类
创建JWT工具类,用于生成和解析JWT,如下所示:
```
@Component
public class JwtUtils {
@Value("${jwt.secret}")
private String secret;
@Value("${jwt.expiration}")
private Long expiration;
public String generateToken(User user) {
Date now = new Date();
Date expireDate = new Date(now.getTime() + expiration);
return Jwts.builder()
.setSubject(user.getUsername())
.setIssuedAt(now)
.setExpiration(expireDate)
.signWith(SignatureAlgorithm.HS512, secret)
.compact();
}
public String getUsernameFromToken(String token) {
return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody().getSubject();
}
public boolean validateToken(String token, User user) {
String username = getUsernameFromToken(token);
return username.equals(user.getUsername()) && !isTokenExpired(token);
}
private boolean isTokenExpired(String token) {
Date expirationDate = Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody().getExpiration();
return expirationDate.before(new Date());
}
}
```
4.创建登录接口
创建登录接口,用于验证用户信息,生成JWT并返回给客户端,如下所示:
```
@RestController
@RequestMapping("/api/auth")
public class AuthController {
@Autowired
private JwtUtils jwtUtils;
@PostMapping("/login")
public ResponseEntity<?> login(@RequestBody User user) {
// 验证用户信息
if (!user.getUsername().equals("admin") || !user.getPassword().equals("admin")) {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
}
// 生成token并返回
String token = jwtUtils.generateToken(user);
return ResponseEntity.ok(token);
}
}
```
5.创建需要认证的接口
创建需要认证的接口,如下所示:
```
@RestController
@RequestMapping("/api")
public class ApiController {
@Autowired
private JwtUtils jwtUtils;
@GetMapping("/hello")
public ResponseEntity<?> hello(HttpServletRequest request) {
// 获取Authorization头部信息
String token = request.getHeader("Authorization");
if (token == null || !token.startsWith("Bearer ")) {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
}
// 解析token并验证
String authToken = token.substring(7);
String username = jwtUtils.getUsernameFromToken(authToken);
User user = new User();
user.setUsername(username);
if (!jwtUtils.validateToken(authToken, user)) {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
}
return ResponseEntity.ok("Hello, " + username);
}
}
```
6.添加配置文件
添加以下配置文件:
```
jwt.secret=your_secret_key
jwt.expiration=86400000
```
其中,jwt.secret为JWT的密钥,jwt.expiration为JWT的过期时间,单位为毫秒。
以上就是使用JWT实现Spring Boot的登录认证的步骤。
阅读全文