springboot2.7.12集成jwt
时间: 2023-10-20 15:32:37 浏览: 183
jwt的环境搭建,以及springboot集成开发
好的,我来为你简单介绍一下Spring Boot 2.7.12集成JWT的方式。
JWT(JSON Web Token)是一种基于 JSON 的开放标准(RFC 7519),用于在网络上安全地传输声明(Claims)。Spring Security 5.x 中内置了对 JWT 的支持,可以方便地实现身份认证和授权功能。
下面是集成JWT的步骤:
1. 添加依赖
在 pom.xml 文件中添加以下依赖:
```
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
```
2. 配置JWT
在 Spring Boot 的配置文件中添加以下配置:
```
jwt:
secret: mySecret
expiration: 604800 # 过期时间为一周
```
这里的 `secret` 是用于生成和校验 JWT 的密钥,`expiration` 是 JWT 的过期时间,单位为秒。
3. 创建JWT工具类
创建一个 JWT 工具类,用于生成和解析 JWT:
```
@Component
public class JwtUtils {
@Value("${jwt.secret}")
private String secret;
@Value("${jwt.expiration}")
private Long expiration;
public String generateToken(String username) {
Date now = new Date();
Date expireDate = new Date(now.getTime() + expiration * 1000);
return Jwts.builder()
.setSubject(username)
.setIssuedAt(now)
.setExpiration(expireDate)
.signWith(SignatureAlgorithm.HS512, secret)
.compact();
}
public String getUsernameFromToken(String token) {
Claims claims = Jwts.parser()
.setSigningKey(secret)
.parseClaimsJws(token)
.getBody();
return claims.getSubject();
}
public boolean validateToken(String token) {
try {
Jwts.parser().setSigningKey(secret).parseClaimsJws(token);
return true;
} catch (SignatureException ex) {
log.error("JWT signature is invalid");
} catch (MalformedJwtException ex) {
log.error("JWT token is invalid");
} catch (ExpiredJwtException ex) {
log.error("JWT token has expired");
} catch (UnsupportedJwtException ex) {
log.error("JWT token is unsupported");
} catch (IllegalArgumentException ex) {
log.error("JWT claims string is empty");
}
return false;
}
}
```
这个工具类中包含了生成和解析 JWT 的方法,以及校验 JWT 的方法。
4. 配置Spring Security
在 Spring Security 的配置类中添加以下配置:
```
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private JwtUtils jwtUtils;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/api/auth/**").permitAll()
.anyRequest().authenticated()
.and()
.addFilterBefore(new JwtAuthenticationFilter(jwtUtils), UsernamePasswordAuthenticationFilter.class);
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
// 配置用户认证的方式,比如基于数据库的认证,LDAP认证等
}
}
```
这里的 `JwtAuthenticationFilter` 是一个自定义的过滤器,用于校验 JWT 并设置用户的身份信息。你需要自己实现这个过滤器。
5. 实现登录接口
实现一个登录接口,用于验证用户的身份,并生成 JWT:
```
@RestController
@RequestMapping("/api/auth")
public class AuthController {
@Autowired
private JwtUtils jwtUtils;
@PostMapping("/login")
public ResponseEntity<?> login(@RequestBody LoginDto loginDto) {
// 调用用户认证的方式验证用户的身份
// 如果验证通过,生成 JWT 并返回给客户端
String token = jwtUtils.generateToken(loginDto.getUsername());
return ResponseEntity.ok(new AuthResponse(token));
}
}
```
这里的 `AuthResponse` 是一个简单的响应类,用于返回 JWT。
以上就是Spring Boot 2.7.12集成JWT的基本步骤。当然,实际情况可能会更加复杂,你需要根据自己的业务需求进行适当的调整。
阅读全文