3

我想为与 Tomcat 建立的每个连接获取一个唯一标识符。我不是在谈论会话或用户(客户端)的唯一性,而是每个连接。比如说,客户端 A 发送一个 GET,然后另一个。在我的场景中,这是两个独立且独特的连接。

在 Tomcat 中是否有任何变量或可以为这种连接起标识符作用的东西?

4

3 回答 3

3

一种选择是使用 ServletFilter:

public class UniqueRequestFilter implements Filter {

    public void doFilter(ServletRequest req, ServletResponse res,
                         FilterChain chain) throws IOException, ServletException {

        String requestID = UUID.randomUUID().toString()
        //save to ThreadLocal...

        try {
            chain.doFilter(req, res);
        }
        finally {
            //remove from ThreadLocal
        }
    }


    public void init(FilterConfig config) throws ServletException {
    }

    public void destroy() {
    }
}

您将能够在应用程序的任何位置从 ThreadLocal 获取请求值。

于 2013-11-05T13:30:15.763 回答
1

Servlet 容器具有会话跟踪机制,通常它的 cookie 名称为“JSESSIONID”,您可以将其用作会话标识符。从 servlet 规范:

会话跟踪 cookie 的标准名称必须是 JSESSIONID,所有符合 3.0 的容器都必须支持该名称

更多细节可以在 servlet 规范中找到。

于 2013-11-05T13:49:21.277 回答
0

一种解决方案可能是在每个请求上创建一个新会话?

实现此目的的一种方法是在 web.xml 中的 session-config/cookie-config 中设置为 true(除非您正在运行 HTTPS 连接)

于 2013-11-05T13:28:25.510 回答