在soringboot项目中使用jwt后如何在普通接口中回去jwt中存储的userId
在Spring Boot项目中使用JWT后,可以在普通接口中获取JWT中存储的userId,需要进行以下步骤:
-
在Spring Boot项目中添加JWT依赖,例如使用
io.jsonwebtoken库。 -
创建一个JWT工具类,用于生成和解析JWT。该类需要包含以下方法:
- 生成JWT:接收userId作为参数,使用JWT库生成一个包含userId的JWT,并设置有效期等其他相关信息。
- 解析JWT:接收JWT字符串作为参数,使用JWT库解析JWT,并返回userId。
-
创建一个拦截器或过滤器,用于在每个请求到达控制器之前验证JWT的有效性,并将解析出的userId存储在请求的上下文中。
-
在普通接口中,通过请求上下文获取存储的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为密钥,需要根据实际情况进行设置,并且需要根据项目的具体需求进行适当的调整
原文地址: https://www.cveoy.top/t/topic/iwyl 著作权归作者所有。请勿转载和采集!