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