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