gpt4 book ai didi

java - Restful Spring 服务中的 session 范围

转载 作者:行者123 更新时间:2023-11-30 07:46:24 25 4
gpt4 key购买 nike

此问题与 this 相关。我有一个 Restful 服务,它以异步方式调用许多 Web 服务(使用线程 - 即发即忘)。我将我的服务收到的请求 header 传递给这些 Web 服务。然而,由于这些请求是以异步方式触发的,因此这些请求通常在我的 REST 服务返回响应后执行。这会导致 HTTP 请求对象丢失。因此,正如本线程中所建议的,我使用 session 范围来保留请求 header 。这会不会有什么负面影响,我应该分析一下。我必须考虑更好的方法吗?

最佳答案

如果您开始使用 session 范围来存储请求,您的服务就不再是 RESTful,因为它不是无状态的。我建议完全避免使用 session 范围。

如果需要在异步线程中使用request对象(使用Spring的@Async注解),只需通过参数将其传递给异步逻辑即可。

类似这样的事情:

@Component
public class AsyncUserService {

@Async("customTaskExecutor")
public void updateOrAddUser(int id, HttpServletRequest request) throws {
//do your stuff
}
}

@Controller
@RequestMapping("/users")
public class UserController {
private final AsyncUserService userService;

@Autowired
public UserController(AsyncUserService userService) {
super();
this.userService = userService;
}

@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
@ResponseStatus(HttpStatus.OK)
public void putUser(@PathVariable("id") int identifier, HttpServletRequest request) {
userService.updateOrAddUser(identifier, request);
}
}

关于java - Restful Spring 服务中的 session 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33883745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com