java jwt登录拦截器
时间: 2023-10-27 16:24:11 浏览: 50
在 Java 中使用 JWT 实现登录拦截器的步骤如下:
1. 首先,你需要引入所需的依赖。可以使用 Maven 或 Gradle 来管理依赖项,以下是使用 Maven 的示例:
```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. 创建一个 JWTUtil 工具类,用于生成和解析 JWT。可以使用 jjwt 库来实现这些功能。以下是一个示例:
```java
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class JWTUtil {
private static final long EXPIRATION_TIME = 864_000_000; // 10 days
private static final String SECRET_KEY = "yourSecretKey";
public static String generateToken(String username) {
Date now = new Date();
Date expiryDate = new Date(now.getTime() + EXPIRATION_TIME);
return Jwts.builder()
.setSubject(username)
.setIssuedAt(now)
.setExpiration(expiryDate)
.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();
}
}
```
3. 创建一个自定义的登录拦截器类,用于验证 JWT。可以实现 `HandlerInterceptor` 接口,并在 `preHandle()` 方法中进行登录验证。以下是一个示例:
```java
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class JwtInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String token = request.getHeader("Authorization");
if (token != null && token.startsWith("Bearer ")) {
token = token.substring(7);
String username = JWTUtil.getUsernameFromToken(token);
// 进行用户验证逻辑
return true; // 放行请求
}
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
return false; // 拦截请求
}
}
```
4. 在 Spring Boot 中配置拦截器。在你的配置类中,使用 `addInterceptors()` 方法将拦截器添加到应用程序中。以下是一个示例:
```java
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new JwtInterceptor())
.addPathPatterns("/api/**") // 拦截指定路径的请求
.excludePathPatterns("/api/login"); // 排除登录接口
}
}
```
以上是使用 JWT 实现登录拦截器的基本步骤。你可以根据自己的实际需求进行相应的调整和扩展。