SpringBoot2-Jwt

使用Java实现JWT令牌生成与验证:以jose4j为例
本文介绍了如何使用jose4j库在Java中创建和验证JSONWebTokens(JWT),包括创建JWT工具类、设置Token参数、以及在登录和拦截器中应用JWT验证的过程。

1.官网

jwt.io/libraries

2.选jose4j

    pom

<dependency>
   <groupId>org.bitbucket.b_c</groupId>
   <artifactId>jose4j</artifactId>
   <version>0.9.4</version>
</dependency>

3.创建jwt工具

public class JwtUtil {

    private static  String secret = "e0e775bfcad04ecc94807b028dfca4d5";// "12345678123456781234567812345678"; // 注意密钥长短(最少32个字符)
    private static String Issuer = "QiXiao";
    private static String Audience = "WangPeng";

    public static String CreateToken(UserEntity user)  {

        try {
            JsonWebSignature jws = new JsonWebSignature();

            //Claim
            JwtClaims claims = new JwtClaims();
            claims.setIssuer(Issuer);  // who creates the token and signs it
            claims.setAudience(Audience); // to whom the token is intended to be sent
            claims.setExpirationTimeMinutesInTheFuture(10); // 过期时间
            claims.setGeneratedJwtId();                     // 为 JWT 设置一个自动生成的唯一 ID
            claims.setIssuedAtToNow();                      // 设置 Token 发布/创建 时间为当前时间
            claims.setNotBeforeMinutesInThePast(2);         // 设置生效时间为 2 分钟前
            claims.setSubject("Bearer"); // the subject/principal is whom the token is about
            claims.setClaim("UserSN", user.getSN());
            claims.setClaim("email","wang_peng_yl@126.com"); // additional claims/attributes about the subject can be added

            jws.setPayload(claims.toJson());

            //Header
            jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.HMAC_SHA256);
            jws.setHeader("typ", "JWT");

            //签名
            Key hmacKey = CreateKey();
            jws.setKey(hmacKey);
            jws.setDoKeyValidation(false);

            String jwt = jws.getCompactSerialization();
            System.out.println(jwt);
            return jwt
### 集成 SA-Token 和 JWT 实现 Spring Boot 身份验证 #### 1. 添加依赖项 为了在 Spring Boot 中集成 SA-Token 并使用 JWT 进行身份验证,首先需要添加必要的 Maven 或 Gradle 依赖项。 对于 Maven 用户,在 `pom.xml` 文件中加入以下内容: ```xml <dependency> <groupId>cn.dev33</groupId> <artifactId>sa-token-spring-boot-starter</artifactId> <version>1.28.0</version> </dependency> <!-- JSON 处理 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> ``` 对于 Gradle 用户,则应在 `build.gradle` 文件内添加如下语句: ```groovy implementation 'cn.dev33:sa-token-spring-boot-starter:1.28.0' // JSON处理库 implementation 'com.fasterxml.jackson.core:jackson-databind:+' ``` #### 2. 创建自定义认证类 基于给定的 JWTToken 类[^2],可以创建一个新的 Java 类来扩展此功能并适应 SA-Token 的需求。下面是一个简单的例子: ```java import cn.dev33.satoken.stp.StpUtil; import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.core.Authentication; public class CustomJwtAuthentication implements Authentication, AuthenticationProvider { private final String token; public CustomJwtAuthentication(String token) { this.token = token; } @Override public Object getPrincipal() { return StpUtil.getLoginIdByToken(token); } @Override public Object getCredentials() { return token; } // ...其他方法... } ``` 请注意,上述代码片段仅作为概念证明,并未完全实现所有接口中的抽象方法;实际应用时需补充完整逻辑。 #### 3. 配置 SA-Token 属性 编辑项目的 application.properties (或 .yml),设置一些基本参数以便更好地控制令牌行为: ```properties # 设置token名称,默认为satoken sa-token.token-name=satoken-jwt # 开启@SaCheckLogin注解校验登录状态的功能 sa-token.check-login.enable=true # 开启@SaCheckRole/@SaCheckPermission注解鉴权功能 sa-token.check-permission.enable=true ``` 通过这些配置选项,能够更灵活地管理应用程序的安全策略。 #### 4. 使用控制器保护 API 接口 最后一步是在 RESTful Web Service 控制器上添加适当的安全约束条件。例如,可以通过 `@PreAuthorize` 注解指定哪些角色有权访问特定资源: ```java @RestController @RequestMapping("/api/v1") public class MyController { @GetMapping("/protected-resource") @PreAuthorize("hasAuthority('ROLE_USER')") public ResponseEntity<String> protectedResource() { return new ResponseEntity<>("This is a protected resource", HttpStatus.OK); } } ``` 以上就是关于如何在一个典型的 Spring Boot 应用程序里集成了 SA-Token 及其与 JWT 结合使用的概述[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wang_peng

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

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

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

打赏作者

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

抵扣说明:

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

余额充值