在Spring Boot项目中使用JWT后,可以在普通接口中获取JWT中存储的userId,需要进行以下步骤:

  1. 在Spring Boot项目中添加JWT依赖,例如使用io.jsonwebtoken库。

  2. 创建一个JWT工具类,用于生成和解析JWT。该类需要包含以下方法:

    • 生成JWT:接收userId作为参数,使用JWT库生成一个包含userId的JWT,并设置有效期等其他相关信息。
    • 解析JWT:接收JWT字符串作为参数,使用JWT库解析JWT,并返回userId。
  3. 创建一个拦截器或过滤器,用于在每个请求到达控制器之前验证JWT的有效性,并将解析出的userId存储在请求的上下文中。

  4. 在普通接口中,通过请求上下文获取存储的userId,即可使用该userId进行相关操作。

下面是一个简单的示例代码:

// JWT工具类
public class JwtUtils {
    private static final String SECRET_KEY = "your-secret-key";
    private static final long EXPIRATION_TIME = 864_000_000; // 10 days

    public static String generateJwt(String userId) {
        return Jwts.builder()
                .setSubject(userId)
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME))
                .signWith(SignatureAlgorithm.HS512, SECRET_KEY)
                .compact();
    }

    public static String getUserIdFromJwt(String jwt) {
        return Jwts.parser()
                .setSigningKey(SECRET_KEY)
                .parseClaimsJws(jwt)
                .getBody()
                .getSubject();
    }
}

// 拦截器或过滤器
@Component
public class JwtInterceptor extends HandlerInterceptorAdapter {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String jwt = request.getHeader("Authorization"); // 从请求头中获取JWT
        if (jwt != null && jwt.startsWith("Bearer ")) {
            jwt = jwt.substring(7);
            String userId = JwtUtils.getUserIdFromJwt(jwt); // 解析JWT获取userId
            request.setAttribute("userId", userId); // 将userId存储在请求上下文中
        }
        return true;
    }
}

// 普通接口
@RestController
public class UserController {
    @GetMapping("/user")
    public ResponseEntity<User> getUser(HttpServletRequest request) {
        String userId = (String) request.getAttribute("userId"); // 从请求上下文中获取userId
        // 根据userId进行相关操作
        // ...
        return ResponseEntity.ok().build();
    }
}

// 配置拦截器或过滤器
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
    @Autowired
    private JwtInterceptor jwtInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(jwtInterceptor).addPathPatterns("/**");
    }
}

在上述示例代码中,JwtUtils类用于生成和解析JWT,JwtInterceptor类用于拦截请求并验证JWT的有效性,UserController类中的getUser方法通过请求上下文获取存储的userId。

请注意,示例代码中的SECRET_KEY为密钥,需要根据实际情况进行设置,并且需要根据项目的具体需求进行适当的调整

在soringboot项目中使用jwt后如何在普通接口中回去jwt中存储的userId

原文地址: https://www.cveoy.top/t/topic/iwyl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录