Java Spring引导:从url中删除jsessionid

Java Spring引导:从url中删除jsessionid,java,spring,spring-mvc,tomcat8,Java,Spring,Spring Mvc,Tomcat8,如何从URL中删除jsessionid 我使用的是SpringBootMVC(没有SpringSecurity;tomcat嵌入式) 我读过,可以通过将disableUrlRewriting设置为“true”来实现。 但这看起来像是一个Spring安全解决方案,我没有使用它(它是一个没有登录的简单项目;只有页面;存在一个会话控制器,并且必须是一个会话控制器) 我这样问是因为谷歌机器人正在创建包含id的URL 编辑: 我用上面描述的解决方案解决了这个问题:我创建了一个又快又脏的spring启动应用

如何从URL中删除jsessionid

我使用的是SpringBootMVC(没有SpringSecurity;tomcat嵌入式)

我读过,可以通过将disableUrlRewriting设置为“true”来实现。 但这看起来像是一个Spring安全解决方案,我没有使用它(它是一个没有登录的简单项目;只有页面;存在一个会话控制器,并且必须是一个会话控制器)

我这样问是因为谷歌机器人正在创建包含id的URL

编辑:
我用上面描述的解决方案解决了这个问题:

我创建了一个又快又脏的spring启动应用程序,下面是我的想法

对于生成的Servletilizer,您可以通过以下方式对其进行更改:

package com.division6.bootr;

import java.util.Collections;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.SessionCookieConfig;
import javax.servlet.SessionTrackingMode;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;

public class ServletInitializer extends SpringBootServletInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        // This can be done here or as the last step in the method
        // Doing it in this order will initialize the Spring
        // Framework first, doing it as last step will initialize
        // the Spring Framework after the Servlet configuration is 
        // established
        super.onStartup(servletContext);

        // This will set to use COOKIE only
        servletContext
            .setSessionTrackingModes(
                Collections.singleton(SessionTrackingMode.COOKIE)
        );
        // This will prevent any JS on the page from accessing the
        // cookie - it will only be used/accessed by the HTTP transport
        // mechanism in use
        SessionCookieConfig sessionCookieConfig=
                servletContext.getSessionCookieConfig();
        sessionCookieConfig.setHttpOnly(true);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(SpringBootrApplication.class);
    }

}
作者备注

我不能100%确定这是什么时候引入的,但通过引入以下参数,同样可以在不必编写代码的情况下实现:

  • server.servlet.session.cookie.http only=true
  • server.servlet.session.tracking modes=cookie
    • 你也可以试试这个

              @Bean
                  public ServletContextInitializer servletContextInitializer() {
                      return new ServletContextInitializer() {
      
                          @Override
                          public void onStartup(ServletContext servletContext) throws ServletException {
                             servletContext.setSessionTrackingModes(Collections.singleton(SessionTrackingMode.COOKIE));
                             SessionCookieConfig sessionCookieConfig=servletContext.getSessionCookieConfig();
                             sessionCookieConfig.setHttpOnly(true);
                          }
                      };
      
              }
      

      由于这个问题是在spring boot环境中提出的,所以我的简单解决方案是:

      server:
        session:
          tracking-modes: cookie
      
      春天2号以后

      server:
        servlet
          session:
            tracking-modes: cookie
      
      添加到appication.yml中,修改嵌入的tomcat配置。从ll spring启动属性列表:

      更便携的选项也适用于非SpringBoot,将以下内容添加到webapp的
      web.xml

      <session-config>
          <tracking-mode>COOKIE</tracking-mode>
      </session-config>
      
      
      曲奇
      
      SpringBoot2.0应该是
      server.servlet.session.tracking modes=cookie
      ,检查上面@DaveG的答案。