在Spring Boot的微服务项目中使用JWT后,可以通过以下步骤在普通接口中优雅地使用JWT中存储的userId:

  1. 创建一个拦截器或过滤器,用于解析和验证JWT。这个拦截器或过滤器可以在每个请求到达控制器之前拦截,并从请求头或请求参数中获取JWT。
  2. 在拦截器或过滤器中,使用JWT库解析JWT,并验证其有效性和签名。
  3. 如果JWT验证通过,获取JWT中存储的userId。
  4. 将userId存储到一个可以在整个请求中访问的地方,例如请求的上下文中。
  5. 在需要使用userId的地方,从请求的上下文中获取userId。

下面是一个示例代码:

首先,创建一个拦截器或过滤器来解析和验证JWT:

@Component
public class JwtFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        String token = httpRequest.getHeader("Authorization");

        // 解析和验证JWT
        // ...

        // 将userId存储到请求的上下文中
        String userId = // 从JWT中获取userId
        RequestContextHolder.currentRequestAttributes().setAttribute("userId", userId, RequestAttributes.SCOPE_REQUEST);

        chain.doFilter(request, response);
    }

    // ...
}

然后,在需要使用userId的地方,从请求的上下文中获取userId:

@RestController
public class UserController {

    @GetMapping("/user")
    public String getUser() {
        String userId = (String) RequestContextHolder.currentRequestAttributes().getAttribute("userId", RequestAttributes.SCOPE_REQUEST);

        // 使用userId进行业务逻辑处理
        // ...

        return "User: " + userId;
    }

    // ...
}

这样,在普通接口中就可以优雅地使用JWT中存储的userId了

在soringboot的微服务项目中使用jwt后如何在普通接口中优雅的使用jwt中存储的userId

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

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