在soringboot的微服务项目中使用jwt后如何在普通接口中优雅的使用jwt中存储的userId
在Spring Boot的微服务项目中使用JWT后,可以通过以下步骤在普通接口中优雅地使用JWT中存储的userId:
- 创建一个拦截器或过滤器,用于解析和验证JWT。这个拦截器或过滤器可以在每个请求到达控制器之前拦截,并从请求头或请求参数中获取JWT。
- 在拦截器或过滤器中,使用JWT库解析JWT,并验证其有效性和签名。
- 如果JWT验证通过,获取JWT中存储的userId。
- 将userId存储到一个可以在整个请求中访问的地方,例如请求的上下文中。
- 在需要使用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了
原文地址: https://www.cveoy.top/t/topic/iwyq 著作权归作者所有。请勿转载和采集!