Запрет Spring для создания нового сеанса в случае сбоя аутентификации - PullRequest
1 голос
/ 01 апреля 2019

С помощью следующего кода новый 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.

У меня есть два вопроса по этому поводу.

  1. Что значит для WebSession быть в НОВОМ состоянии и почему это так? не удаляется, только STARTED состояние удаляется.
  2. Что мне нужно изменить, чтобы либо не создавать сеанс, либо убедиться, что созданные сеансы удаляются по истечении срока действия.
...