Spring добавляет JSESSIONID, несмотря на управление сеансами без сохранения состояния - PullRequest
0 голосов
/ 30 сентября 2018

Я использую рабочую аутентификацию JWT моего веб-приложения со следующей конфигурацией:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
      .csrf().disable()
      .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
      .and()
      .exceptionHandling()
      .authenticationEntryPoint(
          (req, rsp, e) -> p.sendError(HttpServletResponse.SC_UNAUTHORIZED))
      .and()
      .addFilter(new UsernamePasswordAuthenticationFilter(authenticationManager(),
          jwtConfig))
      .addFilterAfter(new JwtTokenAuthenticationFilter(jwtConfig),
          UsernamePasswordAuthenticationFilter.class)
      .authorizeRequests()
      .antMatchers(HttpMethod.POST, jwtConfig.getUri()).permitAll()
      .anyRequest().authenticated();
}

Начиная с SessionCreationPolicy.STATELESS я ожидаю, что Spring не создаст сам сеанс.Однако, если я получаю доступ к любому другому ресурсу, кроме /login, я все равно вижу следующую запись в заголовке ответа:

set-cookie: JSESSIONID=...; Path=/; HttpOnly

Может кто-нибудь объяснить, откуда это (возможно, не из Spring) и если этовсе еще приходит из Spring, что нужно изменить?

Редактировать:

При тестировании в моем контроллере сеанс все еще вводится, как указано в приведенном выше токене.Я до сих пор понятия не имею, откуда это исходит.

@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public void create(HttpSession session) {
    if (session != null) {
        System.out.println("Session is existing"); // executes
    }
}

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Попробуйте установить для сеанса значение none в application.yml:

spring.session.store-type=none

, как указано в документации: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-session.html

0 голосов
/ 30 сентября 2018

Ваша текущая конфигурация (sessionCreationPolicy(SessionCreationPolicy.STATELESS)) гарантирует, что Spring-Security ( и только Spring-Security )

  • не создаст сеанс
  • не будет полагаться на сеанс для предоставления деталей аутентификации (например, предоставление Principal).

Любой другой компонент вашего приложения (например, если вы будете использовать Spring-Session) все еще может создать сеанс .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...