正在获取 java.lang.IllegalStateException:使用 Kafka Consumer 命中时未发现线程绑定请求 API
Getting java.lang.IllegalStateException: No thread-bound request found when using Kafka Consumer to hit API
我的要求是从 API 请求中获取 cookie,然后将相同的 cookie 传递给后续请求,以便使用相同的 JsessionID 维护会话。
为此,我正在尝试通过自动装配 HttpServletRequests 使用 HttpHeaders 获取 cookie。
如果我使用控制器点击 API 我没有得到任何异常并且我能够获取所有请求属性但是如果我 运行 Kafka 和 API 运行s 通过Kafka 消费者,我遇到以下异常:
java.lang.IllegalStateException:未找到线程绑定请求:您指的是实际 Web 请求之外的请求属性,还是在原始接收线程之外处理请求?如果您实际上是在 Web 请求中操作并且仍然收到此消息,则您的代码可能 运行 在 DispatcherServlet 之外:在这种情况下,请使用 RequestContextListener 或 RequestContextFilter 来公开当前请求。
@Autowired
HttpServletRequest req;
@Autowired
HttpServletResponse res;
public ResponseBean putData() {
String jsessionId = null;
String id = null;
// Creating Headers for request
String authValue = req.getHeader("authorization");
String headerCookie = req.getHeader("Cookie");
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.set("authorization", authValue);
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
httpHeaders.set(HttpHeaders.COOKIE, headerCookie);
HttpEntity httpEntity = new HttpEntity(httpHeaders);
ResponseEntity<String> responseEntity = restTemplate.exchange
("https://url", HttpMethod.POST, httpEntity, String.class);
jsessionId = responseEntity.getHeaders().getFirst("Set-Cookie");
if (jsessionId !=null && jsessionId.contains("JSESSION")) {
logger.info("New login session created");
id = jsessionId.substring(jsessionId.indexOf('=') + 1, jsessionId.indexOf(';'));
Cookie cookie = new Cookie("JSESSIONID", id);
res.addCookie(cookie);
}
}
PS- 我没有使用 SpringSecurity。
谁能帮我解决上述问题。
java.lang.IllegalStateException: No thread-bound request found:
此异常试图告诉您 HttpServletRequest
当前没有正在处理的请求,该请求已 auto-wired 进入您的 class。
有些东西正在调用 putData()
方法,但不是通过调用 HTTP 控制器。您提到您正在使用“Kafka Consumer”,所以可能是调用 putData()
的消费者代码?您不能调用它,因为该方法需要有网络请求上下文才能工作,因为它需要请求 headers 和 cookie 信息。
您可能应该将数据持久化代码分离出来,以便控制器 putData()
方法和 kafka 消费者都可以调用它。
我的要求是从 API 请求中获取 cookie,然后将相同的 cookie 传递给后续请求,以便使用相同的 JsessionID 维护会话。
为此,我正在尝试通过自动装配 HttpServletRequests 使用 HttpHeaders 获取 cookie。 如果我使用控制器点击 API 我没有得到任何异常并且我能够获取所有请求属性但是如果我 运行 Kafka 和 API 运行s 通过Kafka 消费者,我遇到以下异常:
java.lang.IllegalStateException:未找到线程绑定请求:您指的是实际 Web 请求之外的请求属性,还是在原始接收线程之外处理请求?如果您实际上是在 Web 请求中操作并且仍然收到此消息,则您的代码可能 运行 在 DispatcherServlet 之外:在这种情况下,请使用 RequestContextListener 或 RequestContextFilter 来公开当前请求。
@Autowired
HttpServletRequest req;
@Autowired
HttpServletResponse res;
public ResponseBean putData() {
String jsessionId = null;
String id = null;
// Creating Headers for request
String authValue = req.getHeader("authorization");
String headerCookie = req.getHeader("Cookie");
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.set("authorization", authValue);
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
httpHeaders.set(HttpHeaders.COOKIE, headerCookie);
HttpEntity httpEntity = new HttpEntity(httpHeaders);
ResponseEntity<String> responseEntity = restTemplate.exchange
("https://url", HttpMethod.POST, httpEntity, String.class);
jsessionId = responseEntity.getHeaders().getFirst("Set-Cookie");
if (jsessionId !=null && jsessionId.contains("JSESSION")) {
logger.info("New login session created");
id = jsessionId.substring(jsessionId.indexOf('=') + 1, jsessionId.indexOf(';'));
Cookie cookie = new Cookie("JSESSIONID", id);
res.addCookie(cookie);
}
}
PS- 我没有使用 SpringSecurity。
谁能帮我解决上述问题。
java.lang.IllegalStateException: No thread-bound request found:
此异常试图告诉您 HttpServletRequest
当前没有正在处理的请求,该请求已 auto-wired 进入您的 class。
有些东西正在调用 putData()
方法,但不是通过调用 HTTP 控制器。您提到您正在使用“Kafka Consumer”,所以可能是调用 putData()
的消费者代码?您不能调用它,因为该方法需要有网络请求上下文才能工作,因为它需要请求 headers 和 cookie 信息。
您可能应该将数据持久化代码分离出来,以便控制器 putData()
方法和 kafka 消费者都可以调用它。