java - Restful Spring 服务中的 session 范围

标签 java spring spring-boot

此问题与 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/

相关文章:

spring - Spring 4 中的@PathVariable 验证

java - 如何将 HandlerInterceptor 应用于 Spring Boot Actuator 端点?

java - 在 applet 中使用 main 方法是否合适?

java - 空白index.jsp重定向到某个servlet

java - 将请求从tomcat传输到apache

java - 有条件地加载应用程序上下文

java - AWT 事件线程中断

java - 在组件之间共享类的实例

java - 将 Heroku Spring Boot 模板降级到 Java 1.7

java - org.apache.ibatis.builder.IncompleteElementException : Could not find result map . 为什么?