首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

jwt springboot

JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用环境间安全地传输信息。它是一种基于JSON的开放标准(RFC 7519),用于在网络应用环境间安全地将信息作为JSON对象传输。JWT通常用于身份验证和授权。

JWT的基础概念

JWT由三部分组成:头部(Header)、载荷(Payload)和签名(Signature),这三部分通过.分隔。

  • Header:通常包含两部分:令牌的类型(即JWT)和所使用的签名算法。
  • Payload:包含声明(claims),声明是关于实体(通常是用户)和其他数据的声明。
  • Signature:用于验证消息在此过程中没有被更改,并且,对于使用私钥签名的令牌,它还可以验证JWT的发送方是否是它所声称的发送方。

JWT的优势

  1. 无状态:服务器不需要保存会话信息,这有助于扩展性。
  2. 安全性:通过签名确保数据不被篡改。
  3. 跨域支持:由于JWT是无状态的,它可以轻松地在不同的域之间传递。

JWT的类型

  • 访问令牌(Access Token):用于访问资源服务器上的受保护资源。
  • 刷新令牌(Refresh Token):用于获取新的访问令牌。

应用场景

  • 单点登录(SSO):用户在一个应用中登录后,可以在其他应用中自动登录。
  • API认证:客户端通过JWT访问API资源。
  • 移动应用认证:移动应用可以使用JWT来验证用户身份。

在Spring Boot中使用JWT

以下是一个简单的示例,展示如何在Spring Boot应用中实现JWT认证。

依赖添加

首先,在pom.xml中添加JWT依赖:

代码语言:txt
复制
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.1</version>
</dependency>

JWT工具类

创建一个工具类来生成和验证JWT:

代码语言:txt
复制
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;

public class JwtUtil {
    private static final String SECRET_KEY = "secret";

    public static String generateToken(String username) {
        return Jwts.builder()
                .setSubject(username)
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 10)) // 10小时
                .signWith(SignatureAlgorithm.HS256, SECRET_KEY)
                .compact();
    }

    public static boolean validateToken(String token, String username) {
        final String extractedUsername = getUsernameFromToken(token);
        return (extractedUsername.equals(username) && !isTokenExpired(token));
    }

    private static String getUsernameFromToken(String token) {
        return Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token).getBody().getSubject();
    }

    private static boolean isTokenExpired(String token) {
        final Date expiration = getExpirationDateFromToken(token);
        return expiration.before(new Date());
    }

    private static Date getExpirationDateFromToken(String token) {
        return Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token).getBody().getExpiration();
    }
}

控制器示例

在控制器中使用JWT进行认证:

代码语言:txt
复制
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api")
public class AuthController {

    @PostMapping("/login")
    public String login(@RequestParam String username, @RequestParam String password) {
        // 这里应该有验证用户名和密码的逻辑
        if ("user".equals(username) && "password".equals(password)) {
            return JwtUtil.generateToken(username);
        }
        return "Invalid credentials";
    }

    @GetMapping("/protected")
    public String protectedEndpoint(@RequestHeader("Authorization") String token) {
        if (token != null && token.startsWith("Bearer ")) {
            token = token.substring(7);
            if (JwtUtil.validateToken(token, "user")) {
                return "Access granted";
            }
        }
        return "Access denied";
    }
}

常见问题及解决方法

1. JWT过期

原因:JWT有一个过期时间,一旦超过这个时间,令牌就会失效。

解决方法:客户端可以使用刷新令牌来获取新的访问令牌。

2. JWT被篡改

原因:如果JWT在传输过程中被篡改,服务器验证签名时会失败。

解决方法:始终通过HTTPS传输JWT,并且在服务器端严格验证签名。

3. 安全性问题

原因:如果密钥泄露,任何人都可以生成有效的JWT。

解决方法:使用强密钥,并定期更换密钥。不要在客户端暴露密钥。

通过以上步骤和注意事项,可以在Spring Boot应用中有效地使用JWT进行用户认证和授权。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

10分8秒

Webman实战教程:如何使用 JWT 认证插件

2.5K
3分23秒

Java分布式高并发电商项目实战 110 JWT-JWT鉴权需求分析 学习猿地

6分0秒

Webman实战教程:如何使用 JWT 认证插件(算法篇)

2.2K
16分20秒

【极简入门】15分钟学会JWT的使用

4.6K
23分44秒

Java教程 SpringBoot 13_springboot-mybatisplus-入门案例

22分55秒

Java教程 SpringBoot 15_springboot-mybatisplus-内置CRUD

14分38秒

05、尚硅谷_SpringBoot_入门-springboot-helloworld.avi

12分50秒

24、尚硅谷_SpringBoot_日志-SpringBoot日志关系.avi

15分49秒

25、尚硅谷_SpringBoot_日志-SpringBoot默认配置.avi

2分42秒

Java教程 SpringBoot 01_SpringBoot概念 学习猿地

1分49秒

Java教程 SpringBoot 16_springboot-mybatisplus-投影查询 学

16分3秒

短信业务+springboot

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券