JJWT 使用教程

JJWT 使用教程

jjwtJava JWT: JSON Web Token for Java and Android项目地址:https://gitcode.com/gh_mirrors/jj/jjwt

项目介绍

JJWT(Java JWT)是一个用于创建和验证 JSON Web Token(JWT)的Java库。JJWT完全基于JWT、JWS、JWE、JWK和JWA RFC规范,并且是在Apache 2.0许可条款下的开源项目。该库由Okta的高级架构师Les Hazlewood创建,并由一个贡献者社区支持和维护。JJWT的优点包括功能齐全、安全、流式接口开发方便、可读性强,并且在IDE中有自动补全代码的功能。

项目快速启动

添加依赖

首先,需要在项目中添加JJWT的依赖。如果使用Maven,可以在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-api</artifactId>
    <version>0.12.5</version>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-impl</artifactId>
    <version>0.12.5</version>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-jackson</artifactId>
    <version>0.12.5</version>
</dependency>

创建JWT

以下是一个简单的示例,展示如何创建一个JWT:

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import java.security.Key;

public class JwtExample {
    public static void main(String[] args) {
        Key key = Keys.secretKeyFor(SignatureAlgorithm.HS256);
        String jwt = Jwts.builder()
            .setSubject("user")
            .signWith(key)
            .compact();
        System.out.println(jwt);
    }
}

解析JWT

以下是一个简单的示例,展示如何解析一个JWT:

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import java.security.Key;

public class JwtParserExample {
    public static void main(String[] args) {
        Key key = Keys.secretKeyFor(SignatureAlgorithm.HS256);
        String jwt = "your.jwt.token.here";
        Jws<Claims> jws = Jwts.parserBuilder()
            .setSigningKey(key)
            .build()
            .parseClaimsJws(jwt);
        System.out.println(jws.getBody().getSubject());
    }
}

应用案例和最佳实践

用户认证

JJWT常用于用户认证场景。例如,在Web应用中,用户登录后可以生成一个JWT,并将其返回给客户端。客户端在后续的请求中携带该JWT,服务器端通过解析JWT来验证用户身份。

安全信息传输

JWT还可以用于在不同服务之间安全地传输信息。由于JWT是经过签名的,因此可以确保信息的完整性和来源的真实性。

典型生态项目

Spring Boot集成

JJWT可以与Spring Boot项目无缝集成。通过配置Spring Security,可以实现基于JWT的认证和授权机制。

Android应用

JJWT也适用于Android应用开发。在移动应用中,可以使用JJWT来处理用户认证和数据传输的安全性。

通过以上内容,您可以快速了解并开始使用JJWT库。希望这篇教程对您有所帮助!

jjwtJava JWT: JSON Web Token for Java and Android项目地址:https://gitcode.com/gh_mirrors/jj/jjwt

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是一个简单的 Spring Boot 集成 JWT 的教程: 1. 添加依赖 在 `pom.xml` 文件中添加以下依赖: ```xml <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.0</version> </dependency> ``` 2. 配置 JWT 在 `application.properties` 文件中添加以下属性: ``` # JWT jwt.secret=your_secret_key jwt.expiration=86400 ``` `jwt.secret` 是用来加密 JWT 的密钥,`jwt.expiration` 是 JWT 的过期时间(单位为秒)。 3. 创建 JWT 工具类 创建一个 JWT 工具类,实现生成和验证 JWT 的方法: ```java import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.util.Date; import java.util.HashMap; import java.util.Map; @Component public class JwtUtils { @Value("${jwt.secret}") private String secret; @Value("${jwt.expiration}") private Long expiration; /** * 生成 JWT */ public String generateToken(String subject) { Map<String, Object> claims = new HashMap<>(); claims.put("sub", subject); Date now = new Date(); Date expirationDate = new Date(now.getTime() + expiration * 1000); return Jwts.builder() .setClaims(claims) .setIssuedAt(now) .setExpiration(expirationDate) .signWith(SignatureAlgorithm.HS512, secret) .compact(); } /** * 验证 JWT */ public boolean validateToken(String token) { try { Jwts.parser().setSigningKey(secret).parseClaimsJws(token); return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 获取 JWT 中的数据 */ public String getSubjectFromToken(String token) { Claims claims = Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody(); return claims.getSubject(); } } ``` 4. 创建登录接口 在 Spring Boot 中创建一个登录接口,用来验证用户名和密码,并生成 JWT: ```java @RestController @RequestMapping("/auth") public class AuthController { @Autowired private JwtUtils jwtUtils; @PostMapping("/login") public ResponseEntity<?> login(@RequestBody User user) { // 验证用户名和密码 if (user.getUsername().equals("admin") && user.getPassword().equals("admin")) { // 生成 JWT String token = jwtUtils.generateToken(user.getUsername()); return ResponseEntity.ok(new AuthResponse(token)); } else { return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); } } } ``` 5. 创建需要身份验证的接口 在 Spring Boot 中创建一个需要身份验证的接口,只有在 JWT 有效的情况下才能访问: ```java @RestController @RequestMapping("/api") public class ApiController { @Autowired private JwtUtils jwtUtils; @GetMapping("/user") public ResponseEntity<?> getUserInfo(@RequestHeader("Authorization") String authorization) { // 获取 JWT String token = authorization.substring(7); // 验证 JWT if (jwtUtils.validateToken(token)) { // 获取 JWT 中的数据 String username = jwtUtils.getSubjectFromToken(token); User user = new User(username, "******"); return ResponseEntity.ok(user); } else { return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); } } } ``` 6. 测试 启动 Spring Boot 应用,使用 Postman 或者其他工具访问登录接口 `/auth/login`,传入用户名和密码,成功后会返回一个 JWT,例如: ``` { "token": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImlhdCI6MTYxMDY5NjAyMiwiZXhwIjoxNjEwNzAzMjIyfQ.0kOezsPNNxXW3Lj5p2R1j8Mjv5bY1aKtV4xxeXnTJG3Rt1NlCj6nJUc8yfIjJp5uKbmkR-fVU4P4nQD7GMJfpg" } ``` 然后访问需要身份验证的接口 `/api/user`,在请求头中添加 `Authorization: Bearer your_jwt_token`,例如: ``` Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImlhdCI6MTYxMDY5NjAyMiwiZXhwIjoxNjEwNzAzMjIyfQ.0kOezsPNNxXW3Lj5p2R1j8Mjv5bY1aKtV4xxeXnTJG3Rt1NlCj6nJUc8yfIjJp5uKbmkR-fVU4P4nQD7GMJfpg ``` 如果 JWT 有效,则会返回用户信息: ``` { "username": "admin", "password": "******" } ``` 如果 JWT 无效,则会返回 `401 Unauthorized`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

侯天阔Kirstyn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值