【问题标题】:How to set cookie name in a Spring Boot application running in a standalone Tomcat?如何在独立 Tomcat 中运行的 Spring Boot 应用程序中设置 cookie 名称?
【发布时间】:2017-06-20 15:39:39
【问题描述】:

我尝试了不同的方法来设置自定义 cookie 名称。但在我的配置中没有一个工作。

我有一个在独立 Tomcat 中运行的 Spring Boot 应用程序。

我尝试在派生自SpringBootServletInitializerSpringBootApplication 类中设置cookie 名称:

@Value("${session.cookie.name}")
private String sessionCookieName;

@Override
public void onStartup(ServletContext servletContext) throws ServletException {
    servletContext.getSessionCookieConfig().setName(sessionCookieName);
    super.onStartup(servletContext);
}


我还尝试将 bean 定义为 DefaultCookieSerializer:

@Value("${session.cookie.name}")
private String sessionCookieName;

@Bean
public DefaultCookieSerializer defaultCookieSerializer(){
    DefaultCookieSerializer defaultCookieSerializer = new DefaultCookieSerializer();
    defaultCookieSerializer.setCookieName(sessionCookieName);
    return defaultCookieSerializer;
}


但是到目前为止没有任何效果,我总是得到默认的JSESSONID,而不是我配置的session.cookie.name

还有其他方法可以自定义 cookie 名称吗?

【问题讨论】:

  • 添加一个TomcatContainerCustomizer作为bean,并使用Context(传入)上的setSessionCookieName方法来更改cookie的名称。
  • 请添加完整的 Application 课程,而不是 sn-p。
  • 请将您的解决方案发布为问题的答案,而不是您问题的更新。这将有助于未来的访问者理解并减少混乱。谢谢。

标签: spring tomcat cookies spring-boot


【解决方案1】:

我按照建议尝试了 TomcatContextCustomizer。但我认为它不起作用,当您将应用程序部署为 WAR 文件时,因为它仅适用于嵌入式 tomcat。

我通过添加 web.xml 解决了这个问题。在文件夹 src/main/webapp/WEB-INF 中。我对这个解决方案并不满意,因为我不想在我的 Spring Boot 应用程序中使用 web.xml。但它有效...

<?xml version="1.0" encoding="UTF-8"?>
  <web-app id="WebApp_ID" version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"         
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee    
      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
      metadata-complete="true">
    <session-config>
        <session-timeout>30</session-timeout>
        <cookie-config>
             <name>CUSTOM_SESSION_ID</name>
             <http-only>true</http-only>
        </cookie-config>
        <tracking-mode>COOKIE</tracking-mode>
    </session-config>
</web-app>

如果有更好的解决方案,请告诉我

【讨论】:

    【解决方案2】:

    在 Spring Boot 应用程序中。您可以通过在application.properties 文件中设置自定义名称来重命名JESSIONID,如下所示:

    server.servlet.session.cookie.name=Your_custome_name
    

    对我来说很好用。

    【讨论】:

      猜你喜欢
      • 2017-07-04
      • 1970-01-01
      • 2016-04-27
      • 1970-01-01
      • 2018-09-08
      • 2019-03-13
      • 2017-05-25
      • 1970-01-01
      • 2016-08-10
      相关资源
      最近更新 更多