java - RequestContextHolder.getRequestAttributes() 第二次调用返回 null
问题描述
我在使用RequestionContextHolder
. 我有一个密钥斗篷令牌存储在上下文持有者的属性中。我得到该行的属性:
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
我多次需要这个 keycloak 令牌。
首先,在登录后,我得到 requestAttributes 然后是令牌(一切都很好)。
然后我稍后在使用应用程序时需要它(点击几次后),RequestContextHolder.getRequestAttributes()
返回 null (那时不太好)。
我不明白为什么第一次一切正常,然后它只返回 null。
我试图把它放在 web.xml 中,但它没有改变任何东西:
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
有人可以帮忙吗?
解决方案
每个 HTTP 请求都在一个单独的调用中。因此,一旦登录成功,您可能可以保留令牌。过滤器可用于此。
您可以做的一种方法是像这样在 Session 中添加它
使用过滤器,您可以像这样获取 HttpSession 并将令牌添加到其中。
HttpServletRequest req;
HttpSession session=req.getSession();
session.setAttribute("mytoken","token");
稍后您可以在每次通话中这样阅读
@GetMapping("logdetail")
public void getAllLogs(HttpSession session) {
session.getAttribute("mytoken");
}
推荐阅读
- amazon-web-services - Amazon Forecast - TARGET_TIME_SERIES 中的额外属性?
- firebase - node_modules\@firebase 和 node_modules\firebase 包有什么区别?
- python - 快速更新垂直线位置
- web-services - 服务未启动(微服务)取决于 intellij 版本
- c++ - Lisp 像 C++ 函数调用 std::tuple 和折叠表达式
- excel - 按列计算其他 3 列之一中的一个条件
- node.js - NestJS:复制资产不适用于 Linux
- azure - 如何获取 RunCommandResult 以确定是否有错误?
- wpf - 如何使用具有多个路径的 Svg 图像
- reactjs - 在执行 axios 发布请求时,如何解决与打字稿反应时未捕获的承诺错误?