spring boot3登录开发(整合jwt)

Spring Boot 3 整合 JWT(JSON Web Tokens)用于登录开发涉及多个步骤。JWT 是一种开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为 JSON 对象在各方之间安全地传输信息。这些信息可以被验证和信任,因为它们是数字签名的。

以下是一个简单的步骤指南,用于在 Spring Boot 3 应用中整合 JWT:

1. 添加依赖

首先,在你的 pom.xml 文件中添加 Spring Boot Web 和 JWT 相关的依赖:

<dependencies>  
    <!-- Spring Boot Web Starter -->  
    <dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-web</artifactId>  
    </dependency>  
    <!-- JWT Library, 例如 jjwt -->  
    <dependency>  
        <groupId>io.jsonwebtoken</groupId>  
        <artifactId>jjwt</artifactId>  
        <version>你的jjwt版本号</version>  
    </dependency>  
    <!-- 其他依赖 -->  
</dependencies>

2. 配置 JWT

创建一个配置类,配置 JWT 的密钥和有效期等:

import io.jsonwebtoken.SignatureAlgorithm;  
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;  
  
@Configuration  
public class JwtConfig {  
  
    public static final String SECRET_KEY = "你的密钥"; // 生产环境中请确保此密钥的安全性  
    public static final long JWT_EXPIRATION_MS = 86400000; // 24小时  
  
    @Bean  
    public SignatureAlgorithm signatureAlgorithm() {  
        return SignatureAlgorithm.HS512; // 使用HS512算法  
    }  
}

application.propertiesapplication.yml文件中配置JWT相关的属性,如密钥、过期时间等。

jwt:  
  secret: your-secret-key  
  expiration: 86400000 # 1天,单位:毫秒

3. 创建 JWT 工具类

创建一个工具类,用于生成和验证 JWT:

import io.jsonwebtoken.Claims;  
import io.jsonwebtoken.Jwts;  
import io.jsonwebtoken.SignatureException;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.stereotype.Component;  
  
import java.util.Date;  
import java.util.function.Function;  
  
@Component  
public class JwtTokenUtil {  
  
    @Autowired  
    private SignatureAlgorithm signatureAlgorithm;  
  
    public String generateToken(String userId) {  
        Date now = new Date();  
        Date expirationDate = new Date(now.getTime() + JwtConfig.JWT_EXPIRATION_MS);  
  
        return Jwts.builder()  
                .setClaims(getClaims(userId))  
                .setExpiration(expirationDate)  
                .signWith(signatureAlgorithm, JwtConfig.SECRET_KEY)  
                .compact();  
    }  
  
    private Claims getClaims(String userId) {  
        return Jwts.claims().setId(userId);  
    }  
  
    public String getUserIdFromToken(String token) {  
        Claims claims = getAllClaimsFromToken(token);  
        return claims.getId();  
    }  
  
    public boolean validateToken(String token, String userId) {  
        final String userIdFromToken = getUserIdFromToken(token);  
        return (userIdFromToken != null && userId.equals(userIdFromToken));  
    }  
  
    private Claims getAllClaimsFromToken(String token) {  
        Claims claims;  
        try {  
            claims = Jwts.parser()  
                    .setSigningKey(JwtConfig.SECRET_KEY)  
                    .parseClaimsJws(token)  
                    .getBody();  
        } catch (SignatureException e) {  
            claims = null;  
        }  
        return claims;  
    }  
}

4. 创建登录接口

在你的 Controller 中,创建处理登录请求的接口:

import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.http.ResponseEntity;  
import org.springframework.web.bind.annotation.*;  
  
@RestController  
@RequestMapping("/api/auth")  
public class AuthController {  
  
    @Autowired  
    private AuthService authService;  
  
    @PostMapping("/login")  
    public ResponseEntity<?> login(@RequestBody LoginRequest loginRequest) {  
        String token = authService.login(loginRequest);  
        return ResponseEntity.ok(new TokenResponse(token));  
    }  
}

相关推荐

  1. spring boot3登录开发(整合jwt)

    2024-03-27 09:06:03       42 阅读
  2. SpringBoot整合JWT

    2024-03-27 09:06:03       57 阅读
  3. SpringBoot 整合 JWT

    2024-03-27 09:06:03       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-27 09:06:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-27 09:06:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-27 09:06:03       82 阅读
  4. Python语言-面向对象

    2024-03-27 09:06:03       91 阅读

热门阅读

  1. 【Python笔记-FastAPI】定时任务实现(APScheduler)

    2024-03-27 09:06:03       35 阅读
  2. .net core 将html 转为图片

    2024-03-27 09:06:03       32 阅读
  3. 使用 PointNet 和 PyTorch3D 进行点云分类

    2024-03-27 09:06:03       33 阅读
  4. QEMU安装和使用@Ubuntu(待续)

    2024-03-27 09:06:03       43 阅读