【问题标题】:Spring Boot: remove jsessionid from urlSpring Boot:从 url 中删除 jsessionid
【发布时间】:2015-10-25 19:31:42
【问题描述】:

如何从我的网址中删除 jsessionid?

我正在使用 Spring Boot MVC(没有 Spring Security;嵌入了 tomcat)。

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

我问这个是因为 GoogleBot 正在创建包含 id 的 url。

编辑: 我使用以下描述的解决方案解决了它:https://randomcoder.org/articles/jsessionid-considered-harmful

【问题讨论】:

    标签: java spring spring-mvc tomcat8


    【解决方案1】:

    由于这个问题是在春季启动上下文中,对我来说简单的解决方案是:

    server:
      session:
        tracking-modes: cookie
    

    从春季 2 开始

    server:
      servlet
        session:
          tracking-modes: cookie
    

    在 appication.yml 中添加它修改嵌入式 tomcat 配置。从 ll spring boot 属性列表中: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties

    【讨论】:

    • spring-boot 2.0 应该是server.servlet.session.tracking-modes=cookie,查看上面@DaveG 的答案。
    【解决方案2】:

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

    <session-config>
        <tracking-mode>COOKIE</tracking-mode>
    </session-config>
    

    【讨论】:

      【解决方案3】:

      我创建了一个又快又脏的 spring-boot 应用程序,这就是我想出的。

      生成的 ServletInitializer,你可以用这种方式改变它:

      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

      【讨论】:

        【解决方案4】:

        你也可以试试这个,

                @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);
                            }
                        };
        
                }
        

        【讨论】:

          猜你喜欢
          • 2012-07-04
          • 1970-01-01
          • 1970-01-01
          • 2011-12-10
          • 2011-07-13
          • 2013-01-08
          • 2012-02-29
          • 2013-04-03
          相关资源
          最近更新 更多