С помощью следующего кода новый WebSession
создается каждый раз, когда кто-то заходит на мой сайт. Состояние WebSession
установлено на NEW
без атрибутов. Этот сеанс никогда не удаляется по какой-либо причине.
@Bean
public SecurityWebFilterChain securityWebFilterChainCatchAll(ServerHttpSecurity http) {
return http
.csrf().disable()
.authorizeExchange()
.pathMatchers("/", "/static/**")
.permitAll()
.anyExchange()
.denyAll()
.and()
.exceptionHandling()
.authenticationEntryPoint(this::returnPage)
.accessDeniedHandler(this::returnPage)
.and()
.formLogin().disable()
.httpBasic().disable()
.build();
}
private Mono<Void> returnPage(ServerWebExchange exchange, RuntimeException denied) {
Resource indexHtml = new ClassPathResource("/static/index.html");
return ok().contentType(MediaType.TEXT_HTML).syncBody(indexHtml).flatMap(d -> d.writeTo(exchange, new HandlerStrategiesResponseContext(HandlerStrategies.withDefaults())));
}
class HandlerStrategiesResponseContext implements ServerResponse.Context
{
private final HandlerStrategies strategies;
HandlerStrategiesResponseContext(HandlerStrategies strategies) {
this.strategies = strategies;
}
@Override
public List<HttpMessageWriter<?>> messageWriters() {
return this.strategies.messageWriters();
}
@Override
public List<ViewResolver> viewResolvers() {
return this.strategies.viewResolvers();
}
}
Это ловушка ServerHttpSecurity
У меня есть более конкретная конфигурация для моей конечной точки /api
, но они работают должным образом, когда WebSession
установлен в состояние STARTED
и атрибут SPRING_SECURITY_CONTEXT
.
У меня есть два вопроса по этому поводу.
- Что значит для
WebSession
быть в НОВОМ состоянии и почему это так?
не удаляется, только STARTED
состояние удаляется.
- Что мне нужно изменить, чтобы либо не создавать сеанс, либо убедиться, что созданные сеансы удаляются по истечении срока действия.