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");
}
我在使用 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");
}