java如何配置jwt
配置 JWT 在 Java 中的步骤
添加依赖
在 Maven 项目中,添加以下依赖到 pom.xml 文件:
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.5</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.11.5</version>
<scope>runtime</scope>
</dependency>
生成 JWT Token
使用 io.jsonwebtoken 库生成 JWT Token:
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import java.security.Key;
import java.util.Date;
Key key = Keys.secretKeyFor(SignatureAlgorithm.HS256);
String token = Jwts.builder()
.setSubject("user123")
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + 3600000)) // 1小时后过期
.signWith(key)
.compact();
解析 JWT Token
验证并解析 JWT Token:
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
Jws<Claims> claimsJws = Jwts.parserBuilder()
.setSigningKey(key)
.build()
.parseClaimsJws(token);
Claims claims = claimsJws.getBody();
String username = claims.getSubject();
配置 JWT 密钥
建议将密钥存储在安全的地方(如环境变量或配置文件中):

String secretKey = System.getenv("JWT_SECRET");
Key key = Keys.hmacShaKeyFor(secretKey.getBytes());
集成到 Spring Security
在 Spring Boot 项目中,可以通过 SecurityConfig 配置 JWT 过滤器:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.addFilterBefore(new JwtTokenFilter(), UsernamePasswordAuthenticationFilter.class)
.authorizeRequests()
.antMatchers("/api/public/").permitAll()
.anyRequest().authenticated();
}
}
创建 JWT 过滤器
实现 OncePerRequestFilter 来验证 JWT:

public class JwtTokenFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
String token = extractToken(request);
if (token != null && validateToken(token)) {
Authentication auth = getAuthentication(token);
SecurityContextHolder.getContext().setAuthentication(auth);
}
filterChain.doFilter(request, response);
}
}
设置 Token 过期时间
通过 setExpiration 方法控制 Token 有效期:
Date expiryDate = new Date(System.currentTimeMillis() + 86400000); // 24小时
String token = Jwts.builder()
.setExpiration(expiryDate)
.signWith(key)
.compact();
自定义 Claims
在 Token 中添加自定义数据:
String token = Jwts.builder()
.claim("role", "admin")
.claim("userId", 12345)
.signWith(key)
.compact();
异常处理
捕获并处理 JWT 解析时的异常:
try {
Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token);
} catch (ExpiredJwtException e) {
// Token 过期
} catch (JwtException e) {
// 无效 Token
}
注意事项
- 密钥需足够复杂,推荐使用
Keys.secretKeyFor(SignatureAlgorithm.HS256)生成。 - 避免在 Token 中存储敏感信息。
- 生产环境应启用 HTTPS 以防止 Token 被截获。
- 定期轮换密钥以提高安全性。






