Spring boot настроить пользовательский jsessionid для встроенного сервера

Я хочу настроить свой контекст сервлета, такой как установка пользовательского ключа jsessionId (см. Изменение имени JSESSIONID cookie)

Я считаю, что я могу использовать SpringBootServletInitializer при запуске файла WAR, манипулируя servletContext в onStartup(). Однако, когда я запускаю на встроенном сервере приложений, используя new SpringApplicationBuilder().run(), я не знаю лучшего места для манипулирования контекстом сервлета.

Ответ 1

Начиная с Spring Boot 1.3 вы можете просто установить свойство конфигурации;

Spring Boot 1.3, 1.4, 1.5

server.session.cookie.name = MYSESSIONID

Spring Boot 2.x

server.servlet.session.cookie.name = MYSESSIONID

Намного проще, чем написать класс конфигурации.

См. Https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html для получения дополнительных свойств, связанных с сеансом.

Ответ 2

ServletContextInitializer bean-компонент ServletContextInitializer в конфигурации вашего приложения:

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

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

}

В качестве альтернативы, сам класс вашего приложения может реализовать 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");
    }

}

Ответ 3

с сеансом spring, если вы хотите изменить имя файла cookie, вы можете сделать это

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

Я нахожу это в источнике сеанса spring

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

Ответ 4

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
    .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER).and()
    .csrf().disable();  
}

Вы можете попробовать это, так как он удаляет jsession id из URL