springboot用jwt实现token登录验证的代码
时间: 2023-08-31 18:37:38 浏览: 338
### 回答1:
可以参考下面的代码实现 Springboot 使用 JWT 实现 Token 登录验证:@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
// ... @Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/api/**").authenticated()
.and()
.addFilter(new JWTAuthenticationFilter(authenticationManager()))
.addFilter(new JWTAuthorizationFilter(authenticationManager()));
}
}
### 回答2:
Spring Boot是一个开发框架,可用于构建独立的、基于Spring的应用程序。JWT(Json Web Token)是一种用于认证和授权的开放标准,它将用户信息加密在令牌中。
下面是使用Spring Boot和JWT实现Token登录验证的代码示例:
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工具类,用于生成和解析JWT的方法:
```java
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class JwtUtil {
private static final String SECRET_KEY = "your_secret_key";
private static final long EXPIRATION_TIME = 86400000; // 24小时
public static String generateToken(String username) {
Date now = new Date();
Date expirationTime = new Date(now.getTime() + EXPIRATION_TIME);
return Jwts.builder()
.setSubject(username)
.setIssuedAt(now)
.setExpiration(expirationTime)
.signWith(SignatureAlgorithm.HS512, SECRET_KEY)
.compact();
}
public static String getUsernameFromToken(String token) {
Claims claims = Jwts.parser()
.setSigningKey(SECRET_KEY)
.parseClaimsJws(token)
.getBody();
return claims.getSubject();
}
public static boolean validateToken(String token) {
try {
Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token);
return true;
} catch (Exception e) {
return false;
}
}
}
```
3. 创建一个控制器,包含登录和验证方法:
```java
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api")
public class AuthController {
@PostMapping("/login")
public ResponseEntity<?> login(@RequestBody UserCredentials credentials) {
// 检查用户凭据并生成令牌
if (credentials.getUsername().equals("admin") && credentials.getPassword().equals("admin123")) {
String token = JwtUtil.generateToken(credentials.getUsername());
return ResponseEntity.ok(new AuthResponse(token));
} else {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
}
}
@GetMapping("/protected")
public ResponseEntity<?> protectedResource(@RequestHeader("Authorization") String token) {
// 验证令牌并提供受保护的资源
if (JwtUtil.validateToken(token)) {
return ResponseEntity.ok("Protected resource accessed successfully");
} else {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
}
}
}
```
4. 定义用户凭据模型类:
```java
public class UserCredentials {
private String username;
private String password;
// getter和setter方法
}
```
5. 定义认证响应模型类:
```java
public class AuthResponse {
private String token;
// 构造函数和getter方法
}
```
上述代码示例实现了使用JWT进行Token登录验证的功能。用户通过登录接口提供正确的凭据后,将获得一个JWT令牌。然后,可以使用此令牌访问受保护的资源,该资源通过令牌进行验证。如果验证成功,则允许访问,否则返回未授权的HTTP状态码。
阅读全文