嗨,您要实现的目标是获取Java Spring 启动RESTApi Controller 中从前端提交的承载 token ,并使用伪装客户端向另一个微服务发出另一个请求?这是我的工作
上图是我如何处理 postman 的请求,这是我的 Controller 代码:
@Operation(summary = "Save new")
@PostMapping("/store")
public ResponseEntity<ResponseRequest<TransDeliveryPlanning>> saveNewTransDeliveryPlanning(
@Valid @RequestBody InputRequest<TransDeliveryPlanningDto> request) {
TransDeliveryPlanning newTransDeliveryPlanning = transDeliveryPlanningService.save(request);
ResponseRequest<TransDeliveryPlanning> response = new ResponseRequest<TransDeliveryPlanning>();
if (newTransDeliveryPlanning != null) {
response.setMessage(PESAN_SIMPAN_BERHASIL);
response.setData(newTransDeliveryPlanning);
} else {
response.setMessage(PESAN_SIMPAN_GAGAL);
}
return ResponseEntity.ok(response);
}
这是我的服务样子:public TransDeliveryPlanning save(InputRequest<TransDeliveryPlanningDto> request) {
Future<List<PartnerDto>> initPartners = execs.submit(getDataFromAccount(transDeliveryPlanningDtSoDtoPartnerIdsSets));
}
public Callable<List<PartnerDto>> getDataFromAccount(Set<Long> ids) {
String tokenString = "i should get the token from postman, how do i get it to here?";
List<PartnerDto> partnerDtoResponse = accountFeignClient.getData("Bearer " + tokenString, ids);
return () -> partnerDtoResponse;
}
如您所见,在“tokenString”中,我放置了一个我所质疑的字符串,我如何从 postman 那里将其传送到那里?
最佳答案
尽管建议的答案有效,但每次将 token 传递给FeignClient
调用仍不是最佳方法。
我建议为假请求创建一个拦截器,然后可以从RequestContextHolder
中提取 token 并将其直接添加到请求 header 中。
像这样:
@Component
public class FeignClientInterceptor implements RequestInterceptor {
private static final String AUTHORIZATION_HEADER = "Authorization";
public static String getBearerTokenHeader() {
return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getHeader("Authorization");
}
@Override
public void apply(RequestTemplate requestTemplate) {
requestTemplate.header(AUTHORIZATION_HEADER, getBearerTokenHeader());
}
}
这样,您就可以解决问题
关于java - 如何在Java Spring Boot中从请求 header 获取承载 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65019801/