Cookie不在XHR请求/跨域中发送

时间:2019-08-25 18:29:08

标签: javascript spring-boot cookies kotlin cross-domain

步骤1

客户端向enter = False while not enter: user_choice = input('Enter d to guess the definition of a word or enter w to guess what word a definition describes: ') if user_choice == 'd': enter = True show_flashcard() elif user_choice == 'w': enter = True show_definition() else: print('You must either enter the letter "d" or "w" to continue.') 发出HTTP请求

步骤2

该请求由nginx代理,并路由到处理该请求的Spring Boot应用程序:

GET https://sub.d0main.com/getWithCookie

步骤3

“ / renderPage”端点生成一个HTML + JS页面,其中包含带有以下处理程序的提交按钮:

GetMapping("/getWithCookie")
fun getWithCookie(response: HttpServletResponse) {
  val cookie = Cookie("longCookie", "42")
  cookie.maxAge = 500
  response.addCookie(cookie)
  response.sendRedirect("https://d0main.com/renderPage")
}

步骤4

浏览器呈现此页面,用户单击提交按钮。请注意,页面地址为var xhr = new XMLHttpRequest(); xhr.open('POST', 'https://sub.d0main.com/postWithCookie', true); xhr.setRequestHeader('Content-type', 'application/json'); xhr.withCredentials = true; xhr.send(JSON.stringify({})); ,并且存在一个域为https://d0main.com/renderPage的cookie。

步骤5

该请求由nginx代理,并路由到应在其中处理的Spring Boot应用程序。 sub.d0main.com映射看起来像

/postWithCookie

但是Spring Boot拒绝了状态码为400的请求,因为缺少必需的cookie参数。实际响应如下:

@PostMapping("/postWithCookie", consumes = [MediaType.APPLICATION_JSON_VALUE])
fun postWithCookie(
@CookieValue("longCookie") longCookie: Long) {
  // ...
}

该如何解决?

1 个答案:

答案 0 :(得分:0)

这里是开始使用Cookie和Spring Boot的好地方。

https://www.viralpatel.net/spring-mvc-cookie-example/