Spring boot为嵌入式服务器配置自定义jsessionid

问题描述 投票:0回答:4

我想配置我的 servlet 上下文,例如设置自定义 jsessionId 键(请参阅更改 cookie JSESSIONID 名称

我相信我可以在运行 WAR 文件时使用

SpringBootServletInitializer
,操作
servletContext
中的
onStartup()
。但是,当我在嵌入式应用程序服务器上运行时,使用
new SpringApplicationBuilder().run()
,我不知道操作servlet上下文的最佳位置。

java spring-boot jsessionid
4个回答
57
投票

Spring Boot 1.3开始,您可以简单地设置一个配置属性;

Spring Boot 1.3、1.4、1.5

server.session.cookie.name = MYSESSIONID

Spring Boot 2.x、3.x

server.servlet.session.cookie.name = MYSESSIONID

Spring Boot WebFlux 2.x、3.x

server.reactive.session.cookie.name = MYSESSIONID

比编写配置类简单多了。

请参阅 https://docs.spring.io/spring-boot/appendix/application-properties/index.html#application-properties.server.server.reactive.session.cookie.name 了解更多与会话相关的属性。


28
投票

在应用程序的配置中声明一个

ServletContextInitializer
bean:

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

}

4
投票

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

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

您可以尝试此操作,因为它会从 URL 中删除 jsession id

© www.soinside.com 2019 - 2024. All rights reserved.