簡體   English   中英

如何在 session 中存儲一個值,以后必須根據來自第 3 方站點的回調請求訪問該值?

[英]How do I store a value in session that has to be later accessed upon a callback request from a 3rd party site?

我想在 servlet 的 session 數據中存儲一個變量。 servlet 將用戶重定向到第 3 方站點,並從第 3 方站點將用戶發送到同一 web 應用程序中的 JSP 頁面。 我想訪問 JSP 中的 servlet 存儲的 session 變量(在重定向到第 3 方站點之前)。 如何在 servlet 中存儲這樣的 object? 以及如何從 JSP 文件中訪問該 object ?

您只需要確保回調請求以某種方式指示服務器使用相同的 session 作為初始請求。 通常,這是通過在請求 header 中設置 session cookie 來完成的。 但是第 3 方網站不會這樣做。 但是,Servlet API 為您提供了通過 URL 中的JSESSIONID片段來識別 session 的可能性。

因此,如果您構造回調 URL 如下所示,

HttpSession session = request.getSession();
session.setAttribute("someName", someObject);

String callbackURL = "http://yourhost.com/callback.jsp;JSESSIONID=" + session.getId();
String redirectURL = "http://otherhost.com/process?callbackURL=" + URLEncoder.encode(callbackURL, "UTF-8");

response.sendRedirect(redirectURL);

這樣, callback.jsp將可以訪問相同的 session 以及所有存儲的屬性。 順便說一句,你真的應該在這里使用帶有doGet()的 servlet,預處理 Java 代碼不屬於 JSP。


Apart from the concrete question, there's another way to achieve this: store the information of interest in the application scope by a long, auto-generated and unique key (eg java.util.UUID ) and add it as request parameter to the callback URL . 當要處理回調時,只需從應用程序 scope 獲取它,而不是從 session scope 獲取。 這通常在彈出 window 中完成,該彈出窗口刷新父 window 並在成功處理 JavaScript 的回調后自行關閉。 這樣您就無需擔心 session。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM