如何在jetty 9中禁用基于cookie的JSESSIONID(以及其他任何)会话跟踪功能?

Ale*_*min 5 spring jetty spring-mvc spring-security

我希望在我的无状态或手动维护的状态Spring MVC应用程序中禁用Jetty 9中的各种会话跟踪功能,但我找不到任何显示如何执行此操作的工作示例.

我试过以下/WEB-INF/spring-config.xml标签:

...
<security:http use-expressions="true"
               disable-url-rewriting="true"
               create-session="stateless">
...
Run Code Online (Sandbox Code Playgroud)

与/WEB-INF/jetty-web.xml战争中的以下描述符一起:

<?xml version="1.0"  encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">

<Configure class="org.eclipse.jetty.webapp.WebAppContext">
    <Get name="sessionHandler">
        <Get name="sessionManager">
            <Set name="usingCookies" type="boolean">false</Set>
        </Get>
    </Get>
</Configure>
Run Code Online (Sandbox Code Playgroud)

但是,无论何时尝试打开我的应用程序的任何页面,我仍然会获得JSESSIONID cookie.任何提示为什么以及如何解决它?

Pav*_*ral 5

使用servlet 3,可以将会话跟踪模式设置为servlet注册的一部分 - ServletContext#setSessionTrackingModes...您可以尝试.

但是在你的情况下,我会调查谁在打电话HttpServletRequest#getSession(...).在此方法中放置断点以查看谁在调用它.应用程序中的某些代码正在初始化会话.

  • `SessionTrackingModes`只允许你在URL,SSL和COOKIE版本的跟踪之间进行选择,不可能通过这种方式完全禁用它们.在Jetty 9中不是像Tomcat 7的`/ META-INF/context.xml`文件那样,内容为`<Context disableURLRewriting ="true"cookies ="false"/>`有效地禁用了会话忽略的URL和COOKIE跟踪器是否调用了getSession()? (2认同)