RequestContextHolder.getRequestAttributes() return null 第二次调用

RequestContextHolder.getRequestAttributes() return null the second time called

我在使用 RequestionContextHolder 时遇到问题。我有一个密钥斗篷令牌存储在上下文持有者的属性中。我在那一行得到了属性:

RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();

我多次需要这个 keycloak 令牌。

首先,在登录后,我得到了 requestAttributes,然后是令牌(一​​切正常)。

然后我稍后在使用该应用程序时需要它(点击几下之后),RequestContextHolder.getRequestAttributes() returns null(那时不太好)。

我不明白为什么第一次一切正常,然后就 returns 无效。

我试着把它放在 web.xml 但它没有改变任何东西:

<listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

有人可以帮忙吗?

应用程序中的每次点击都是一个单独的请求,因此它们都有一个单独的 RequestContext。似乎令牌仅针对此登录请求放入请求上下文中。可能是通过 keycloak 集成。

您可能需要在以下请求中识别您的用户。这将是一个会话,有不同的类型可用。然后您的客户端需要在每个请求中发送 sessionid 或令牌。

要了解更多详情,您需要向我们提供更多背景信息。你是如何整合keycloak的?你想用令牌做什么?

每个 HTTP 请求在一个单独的调用中。因此,一旦登录成功,您可能可以保留令牌。为此可以使用过滤器。

一种方法是像这样将其添加到会话中

使用 Filter 你可以获得 HttpSession 并像这样向其中添加令牌。

HttpServletRequest req;

HttpSession session=req.getSession();

session.setAttribute("mytoken","token");

以后每次调用都可以这样看

@GetMapping("logdetail")
public void getAllLogs(HttpSession session) {
    session.getAttribute("mytoken");
}