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

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

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

在应用程序的配置中声明一个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"); } } 

Spring Boot 1.3中,您只需设置配置属性即可;

 server.session.cookie.name = MYSESSIONID 

编写配置类要简单得多。

有关更多与会话相关的属性,请参阅https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html 。

使用spring会话,如果要更改cookie名称,可以执行此操作

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

我在春季会议上找到了这个

弹簧会话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); } 
 @Override protected void configure(HttpSecurity http) throws Exception { http .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER).and() .csrf().disable(); } 

你可以试试这个,因为它从URL中删除了jsession id