Tomcat中连接的唯一标识符

时间:2013-11-05 13:24:13

标签: java tomcat

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

是否有任何变量或某些东西可以在Tomcat中为这种连接扮演标识符角色?

3 个答案:

答案 0 :(得分:2)

一种选择是使用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获取请求值。

答案 1 :(得分:1)

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

会话跟踪cookie的标准名称必须是JSESSIONID, 必须得到所有3.0兼容容器的支持

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

答案 2 :(得分:0)

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

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