web-dev-qa-db-fra.com

Spring boot configure jsessionid personnalisé pour le serveur intégré

Je souhaite configurer mon contexte de servlet, comme la définition d'une clé jsessionId personnalisée (voir Modification du nom JSESSIONID du cookie )

Je crois que je peux utiliser le SpringBootServletInitializer lors de l'exécution d'un fichier WAR, en manipulant le servletContext dans onStartup(). Cependant, lorsque j'exécute sur un serveur d'applications intégré, en utilisant new SpringApplicationBuilder().run(), je ne connais pas le meilleur endroit pour manipuler le contexte de servlet.

20
tkruse

Depuis Spring Boot 1.3 , vous pouvez simplement définir une propriété de configuration;

Spring Boot 1.3, 1.4, 1.5

server.session.cookie.name = MYSESSIONID

Spring Boot 2.x

server.servlet.session.cookie.name = MYSESSIONID

Beaucoup plus simple que d'écrire une classe de configuration.

Voir https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html pour plus de propriétés liées à la session.

41
JamieB

Déclarez un bean ServletContextInitializer dans la configuration de votre application:

@Bean
public ServletContextInitializer servletContextInitializer() {
    return new ServletContextInitializer() {

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

}

Alternativement, votre classe d'application elle-même peut implémenter ServletContextInitializer:

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application implements ServletContextInitializer {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }

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

}
24
Andy Wilkinson

avec la session de printemps, si vous voulez changer le nom du cookie, vous pouvez le faire

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

je trouve cela dans la source de la session de printemps

spring-session-1.2.1.RELEASE-sources.jar! /org/springframework/session/config/annotation/web/http/SpringHttpSessionConfiguration.Java

    @Autowired(required = false)
public void setCookieSerializer(CookieSerializer cookieSerializer) {
    this.defaultHttpSessionStrategy.setCookieSerializer(cookieSerializer);
}
3
jozdoo