当前位置: 首页 > 面试题库 >

在原始接收线程之外访问HttpSession

陆翰藻
2023-03-14
问题内容

我正在使用Spring3。当控制器收到请求时,它将控制权传递给Service
Bean中someMethod()带注释的方法@Async,然后返回。当我在someMethod()HttpSession对象中访问时,我收到此异常

java.lang.IllegalStateException: No thread-bound request found: Are you 
referring to request attributes outside of an actual web request, or 
processing a request outside of the originally receiving thread? If you are 
actually operating within a web request and still receive this message, your 
code is probably running outside of DispatcherServlet/DispatcherPortlet: In 
this case, use RequestContextListener or 
RequestContextFilter to expose the current request.

我该如何解决?


问题答案:

所述HttpSession对象本身可以在多个线程中使用(但 不是
线程安全的,因此必须被同步)。但是,Spring正在做一些额外的魔术,例如,当您具有范围session广阔的bean时。即它ThreadLocal在下面使用绑定当前会话与线程。

我不知道你是什么确切的情况,但显然春尝试检索HttpSession从这个ThreadLocal当你在另一个线程-这显然失败。

解决方案很简单-在@Async方法中提取您需要的会话属性,然后直接传递它们。顺便说一下,这是更好的设计-
避免传递HttpSession对象,因为这会使测试变得更加困难,并且您的代码将来极少被重用。



 类似资料:
  • 通过原始访问日志,您可以查看访问过您网站的用户,而无需显示图形,图表或其他图形。 您可以使用“原始访问日志”菜单下载站点的服务器访问日志的压缩版本。 当您想要快速查看谁访问过您的网站时,这非常有用。 这是域名列表的Raw Access界面 - 在这里,进行原始日志的管理。 精心设计的日志可供下载。 您还可以配置删除或归档域的原始日志。

  • 我正在编写一个自定义中间件,它为每个请求生成一个加密签名(它与AWS API v4使用的身份验证机制非常相似)。为了正确生成此签名,我必须获取HTTP请求的整个原始正文。 我还使用BodyParser,它是在我的自定义中间件之后注册的。 我的自定义中间件可以这样表示: 这就是我在服务器上使用它的方式。 正如您可以验证的那样,中间件已将原始主体成功写入控制台,但请求将永远不会由注册的路由处理,连接将

  • 问题内容: 我正在尝试在Express中编写一个愚蠢的简单Hello World程序,该程序输出有关当前HTTP请求的一些基本数据。 对于POST请求,我想查看原始POST正文。 当我关闭来自邮递员的任何类型的POST请求时,设置为。为什么是空的?如何打印原始POST数据?我不需要POST正文的解析版本,只需原始数据即可。 问题答案: 为了读取发布请求的正文,您需要body-parser。 如果您

  • 问题内容: 我正在整理一个.jar文件。我想创建一个非常简单的.properties文件,其中包含诸如用户名和其他内容之类的可配置内容,以便他们可以手动编辑,而不必包括GUI编辑器。 我想做的是能够按此顺序搜索: 指定的属性文件() 当前目录(调用Java的目录)中的MyApp.properties 用户目录中的MyApp.properties(user.home系统属性?) 存储应用程序.jar

  • 我目前正在使用bitnami/kafka image(https://hub.docker.com/r/bitnami/kafka)并将其部署在kubernetes上。 kubernetes大师:1 库伯内特斯工人:3人 在群集中,其他应用程序能够找到 kafka。尝试从群集外部访问 kafka 容器时出现问题。在阅读时,我读到我们需要为外部 kafka 客户端设置属性“广告.监听器=纯文本://

  • 我在这里遵循Spring启动教程: 使用rest服务的Spring boot教程 本教程工作正常,但是否有一种方法可以在原始JSON被解组(通过jackson JSON处理库)之前打印它以用于日志记录?