[英]Tomcat - Custom Session Cookie Handling
我的問題如下:我們正在努力將我們的應用程序部署為 Tomcat 內的 WebApp。 然而,我們的軟件能夠以多租戶模式運行,即有多個“客戶端”(租戶)由一個 WebApp 實例提供服務。
URL 看起來像這樣(假設 WebApp 的上下文是/app
:
/app/customer1/<path>
/app/customer2/<path>
到目前為止,除了會話管理之外,一切都按預期工作。 我們想為兩個不同的路徑/app/customer1
和/app/customer2
使用兩個不同的會話 Cookie 。 但是,問題在於 Tomcat總是為 WebApp 的上下文路徑/app
創建一個會話 Cookie ,此后無法更改。
有誰知道這個問題的解決方案? 提前致謝!
邁克爾
解決方案是為應用程序創建兩個單獨的 url 模式。
使用@WebServlet:
@WebServlet(
urlPatterns={"/app/customer1/servlet", "/app/customer2/servlet"})
或者,使用 web.xml
<servlet>
<servlet-name>MyApp</servlet-name>
<servlet-class>myPackage.myClass</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyApp</servlet-name>
<url-pattern>/app/customer1/servlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>MyApp</servlet-name>
<url-pattern>/app/customer2/servlet</url-pattern>
</servlet-mapping>
現在,當您創建 cookie 時,路徑將默認為訪問 servlet 的路徑。 每個客戶只會得到它的 cookie。
Cookie cookie = new Cookie("color", "green");
這是一個顯示和創建 cookie 的 servlet。
@WebServlet(
urlPatterns={"/app/customer1/servlet", "/app/customer2/servlet"})
public class CookieExample extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String urlSaved = "No Saved URL";
Cookie[] cookies = req.getCookies();
for (Cookie aCookie : cookies) {
if ("url".equals(aCookie.getName())) {
urlSaved = aCookie.getValue();
}
}
resp.getWriter().print("Saved url = " + urlSaved);
String path = req.getRequestURI().substring(
req.getRequestURI().indexOf("/app")
);
resp.addCookie(new Cookie("url", path));
}
}
這是一張圖片,顯示已經創建了兩個名為“url”的 cookie。 顯示其中之一的詳細信息。 路徑是針對一個客戶的,內容有到特定客戶的路徑,它是一個會話 cookie。 另一個類似,只是路徑是針對另一個客戶的。
我生成 cookie 的方式取決於應用程序的訪問方式。 我使用了兩個不同的鏈接:
<a href="app/customer1/servlet">Cookie Customer 1</a><br>
<a href="app/customer2/servlet">Cookie Customer 2</a>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.