簡體   English   中英

Tomcat - 自定義會話 Cookie 處理

[英]Tomcat - Custom Session Cookie Handling

我的問題如下:我們正在努力將我們的應用程序部署為 Tomcat 內的 WebApp。 然而,我們的軟件能夠以多租戶模式運行,即有多個“客戶端”(租戶)由一個 WebApp 實例提供服務。

URL 看起來像這樣(假設 WebApp 的上下文是/app

  • 對於客戶端 Customer 1,將為 URLs /app/customer1/<path>
  • 對於客戶端 Customer 2,數據將是 URL 的服務器/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 的 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.

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