springboot集成jjwt
时间: 2023-11-05 08:03:56 浏览: 218
springboot集成jwt
1. 引入依赖
在 pom.xml 文件中添加以下依赖:
```
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
```
2. 创建 JWT 工具类
创建一个 JWT 工具类,用于生成和解析 JWT。
```
@Component
public class JwtUtils {
private static final String SECRET_KEY = "your_secret_key"; // 密钥
private static final long EXPIRATION_TIME = 60 * 60 * 1000; // 过期时间
// 生成 JWT
public 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();
}
// 解析 JWT
public String getUsernameFromToken(String token) {
return Jwts.parser()
.setSigningKey(SECRET_KEY)
.parseClaimsJws(token)
.getBody()
.getSubject();
}
}
```
3. 创建拦截器
创建一个拦截器,用于验证 JWT 的有效性。
```
@Component
public class JwtInterceptor implements HandlerInterceptor {
@Autowired
private JwtUtils jwtUtils;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String token = request.getHeader("Authorization");
if (StringUtils.isNotBlank(token) && token.startsWith("Bearer ")) {
token = token.substring(7);
try {
String username = jwtUtils.getUsernameFromToken(token);
if (StringUtils.isNotBlank(username)) {
return true;
}
} catch (Exception e) {
// token 无效
}
}
response.setStatus(HttpStatus.UNAUTHORIZED.value());
return false;
}
}
```
4. 配置拦截器
在 Spring Boot 的配置文件中配置拦截器。
```
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Autowired
private JwtInterceptor jwtInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(jwtInterceptor)
.addPathPatterns("/**")
.excludePathPatterns("/login")
.excludePathPatterns("/error");
}
}
```
5. 登录接口
在登录接口中生成 JWT 并返回给客户端。
```
@RestController
public class UserController {
@Autowired
private JwtUtils jwtUtils;
@PostMapping("/login")
public String login(@RequestParam String username, @RequestParam String password) {
// 验证用户名和密码
// ...
// 生成 JWT
String token = jwtUtils.generateToken(username);
return token;
}
}
```
6. 其他接口
在需要验证 JWT 的接口中,通过 HttpServletRequest 获取 JWT 并验证。
```
@RestController
public class UserController {
@GetMapping("/user")
public String getUser(HttpServletRequest request) {
String token = request.getHeader("Authorization");
String username = jwtUtils.getUsernameFromToken(token.substring(7));
// 根据用户名获取用户信息
// ...
return userInfo;
}
}
```
阅读全文