首页 > 解决方案 > 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>

有人可以帮忙吗?

标签: javaspringkeycloak

解决方案


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

您可以做的一种方法是像这样在 Session 中添加它

使用过滤器,您可以像这样获取 HttpSession 并将令牌添加到其中。

HttpServletRequest req;

HttpSession session=req.getSession();

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

稍后您可以在每次通话中这样阅读

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

推荐阅读