当前位置:首页 > Java

java如何配置jwt

2026-03-25 22:11:59Java

配置 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 解析时的异常:

java如何配置jwt

try {
    Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token);
} catch (ExpiredJwtException e) {
    // Token 过期
} catch (JwtException e) {
    // 无效 Token
}

注意事项

  • 密钥需足够复杂,推荐使用 Keys.secretKeyFor(SignatureAlgorithm.HS256) 生成。
  • 避免在 Token 中存储敏感信息。
  • 生产环境应启用 HTTPS 以防止 Token 被截获。
  • 定期轮换密钥以提高安全性。

标签: javajwt
分享给朋友:

相关文章

如何学java

如何学java

学习Java的基础知识 Java是一门面向对象的编程语言,掌握基础语法是入门的关键。需要了解变量、数据类型、运算符、控制结构(如if-else、for循环、while循环)、数组等概念。可以通过官方文…

如何安装java环境

如何安装java环境

下载JDK安装包 访问Oracle官方网站或OpenJDK项目页面,选择适合操作系统的JDK版本(如Windows、macOS或Linux)。确保下载与系统架构匹配的版本(32位或64位)。 运行安…

如何搭建java开发环境

如何搭建java开发环境

下载并安装JDK 从Oracle官网或OpenJDK下载适合操作系统的JDK版本。运行安装程序并按照提示完成安装,建议选择默认路径以减少配置复杂度。 配置环境变量 在系统环境变量中添加JAVA_HO…

java如何导入jar包

java如何导入jar包

在Eclipse中导入JAR包 右键项目 -> 选择"Properties" -> 左侧导航选择"Java Build Path" -> 切换到"Libraries"标签 ->…

java下载功能vue实现

java下载功能vue实现

Java 后端文件下载功能实现 后端需提供文件下载的接口,通常使用 HttpServletResponse 实现。以下是一个简单的 Java Spring Boot 示例: @GetMapping(…

react如何与java配合

react如何与java配合

React 与 Java 配合的常见方式 React 作为前端框架,通常与 Java 后端通过 RESTful API 或 GraphQL 进行交互。以下是几种常见的配合方式: RESTful AP…