我使用RequestionContextHolder
时遇到了问题。我有一个keycloak令牌存储在上下文持有者的属性中。我得到了该行的属性:
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
我多次需要这个keycloak令牌。
首先,在登录后,我获得requestAttributes然后获得令牌(一切都很好)。
然后我在使用应用程序时需要它(在点击一下之后),RequestContextHolder.getRequestAttributes()
返回null(然后不那么好)。
我不明白为什么第一次都运行良好然后它只返回null。
我试图把它放在web.xml中,但它没有改变任何东西:
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
有人可以帮忙吗?
答案 0 :(得分:0)
您的应用程序中的每次单击都是单独的请求,因此它们都有一个单独的RequestContext。似乎令牌仅针对此登录请求放入请求上下文中。可能是通过keycloak整合。
您可能需要在以下请求中识别您的用户。这将是一个会话,有不同的类型可用。然后,您的客户端需要在每次请求时发送sessionid或令牌。
有关详细信息,您需要向我们提供更多背景信息。你是如何整合keycloak的?您想对令牌做什么?
答案 1 :(得分:0)
单独调用中的每个HTTP请求。因此,一旦登录成功,您可以保留令牌。可以使用过滤器。
你可以做的一种方法是在Session中添加它,就像这样
使用过滤器可以获得HttpSession并像这样添加令牌。
HttpServletRequest req;
HttpSession session=req.getSession();
session.setAttribute("mytoken","token");
稍后您可以在每次通话中以这样的方式阅读
@GetMapping("logdetail")
public void getAllLogs(HttpSession session) {
session.getAttribute("mytoken");
}