每次调用Glassfish时JSESSIONID的更改

时间:2018-08-19 20:32:06

标签: nginx glassfish jsessionid glassfish-4.1

在这里有一个详尽的问题,尝试总结,然后提供一些日志文件等,以便在需要时进行澄清!

我在服务器上进行了以下设置: 之前将NGINX配置为代理的Glassfish 4.1.2。

每个(!) HTTP请求中,JSESSIONID都在更改。

我在本地计算机上具有相同的Glassfish,并且使用相同的.war文件,JSESSIONID保持不变,因此我认为它与代理配置有关。

在Internet上搜索时会发现各种解决方案,这些解决方案似乎都围绕 cookie路径。我尝试了两种发现的解决方案。

Number 1:

if ($http_cookie ~* "jsessionid=([^;]+)(?:;|$)") {
    set $co "jsessionid=$1";
}
proxy_set_header Cookie "$co";

Number 2:

proxy_cookie_path ~*^/.* /;

似乎都没办法,当然当然要在编辑nginx.conf之后重新启动NGINX。

这是我的代理配置

location /CoolApp{
            proxy_pass http://localhost:8080/CoolApp/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }

从这里开始关于我的问题的详细说明,这几乎重复了我已经说过的一切。如果不需要,请不要继续阅读;)

我如何确切地确定JSESSIONID一直在变化?编写一个看起来像这样的过滤器:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest httpRequest = ((HttpServletRequest) request);
        HttpSession session = httpRequest.getSession();

        session.getServletContext().log("Remote Addr:" + httpRequest.getRemoteAddr() + " -> " + session.getId());

        chain.doFilter(request, response);
    }

当浏览器访问任何网站时,哪个会生成此输出,而该网站包含指向.css和.js文件的链接,这使其需要多次调用

[2018-08-19T22:11:20.309+0200] [glassfish 4.1] [INFO] [] [javax.enterprise.web] [tid: _ThreadID=28 _ThreadName=http-listener-1(5)] [timeMillis: 1534709480309] [levelValue: 800] [[
  WebModule[null] ServletContext.log():Remote Addr:127.0.0.1 -> 3d03b720bed3f31f64f4c6ccba72]]

[2018-08-19T22:11:21.521+0200] [glassfish 4.1] [INFO] [] [javax.enterprise.web] [tid: _ThreadID=25 _ThreadName=http-listener-1(2)] [timeMillis: 1534709481521] [levelValue: 800] [[
  WebModule[null] ServletContext.log():Remote Addr:127.0.0.1 -> 3d0403113ee464440cecc966f69f]]

[2018-08-19T22:11:21.583+0200] [glassfish 4.1] [INFO] [] [javax.enterprise.web] [tid: _ThreadID=26 _ThreadName=http-listener-1(3)] [timeMillis: 1534709481583] [levelValue: 800] [[
  WebModule[null] ServletContext.log():Remote Addr:127.0.0.1 -> 3d0406ede4678d2afde229b32cc6]]

现在您可以看到,这些调用都由不同的线程处理。只要线程保持不变,JSESSIONID实际上也就保持不变,但是随后浏览器再次没有发送单个请求,而是耐心地等待响应。

这是实际登录过程中日志的一部分,在该过程中,会多次打印sessionid,然后将结果发送回浏览器:

[2018-08-19T22:08:53.303+0200] [glassfish 4.1] [INFO] [] [javax.enterprise.web] [tid: _ThreadID=25 _ThreadName=http-listener-1(2)] [timeMillis: 1534709333303] [levelValue: 800] [[
  WebModule[null] ServletContext.log():Remote Addr:127.0.0.1 -> 3cdfd36ecc48b70fd99adf474c05]]

[2018-08-19T22:08:53.305+0200] [glassfish 4.1] [INFO] [] [javax.enterprise.web] [tid: _ThreadID=25 _ThreadName=http-listener-1(2)] [timeMillis: 1534709333305] [levelValue: 800] [[
  WebModule[null] ServletContext.log():Redirecting to the login page.]]

[2018-08-19T22:08:53.306+0200] [glassfish 4.1] [INFO] [] [javax.enterprise.web] [tid: _ThreadID=25 _ThreadName=http-listener-1(2)] [timeMillis: 1534709333306] [levelValue: 800] [[
  WebModule[null] ServletContext.log():3cdfd36ecc48b70fd99adf474c05]]

尽管它再次是线程25,但JESESSIONID已更改(因为介于两者之间的任何其他线程都将替换它)。

0 个答案:

没有答案