Spring boot security: запрошенный URL создает нежелательный сеанс redis - PullRequest
0 голосов
/ 25 февраля 2019

Допустим, URL-адрес входа в систему "/ login".Существует два защищенных ресурса:

  • "/ protected"
  • "/", который представляет собой перенаправление 302 на "/ protected"

При неаутентифицированномпользователь пытается получить доступ к «/ protected», он перенаправляется на «/ login».В фоновом режиме создается сеанс, где SPRING_SECURITY_SAVED_REQUEST сохраняется для перенаправления пользователя на URL-адрес "/ protected" после успешного входа в систему.

Это поведение по умолчанию для весенней безопасности.

Моя проблема: сеансы создаются даже тогда, когда пользователи вызывают "/".Таким образом, все боты и тесты на проникновение, которые вызывают домен без действительной информации для входа, создают сеансы в нижележащем слое redis.

Как я могу предотвратить создание этих сеансов, когда не сохранен запрос на перенаправление или, по крайней мере,ограничить их определенным списком действительных конечных точек бэкэнда?

Моя конфигурация безопасности:

protected void configure(HttpSecurity http) throws Exception {
    http
            .authorizeRequests()
            .antMatchers("/password/forgot/**").permitAll()
            .antMatchers("/password/reset/**").permitAll()
            .antMatchers("/css/**").permitAll()
            .antMatchers("/js/**").permitAll()
            .antMatchers("/img/**").permitAll()
            .antMatchers( "/favicon.ico").permitAll()
            .antMatchers("/login").permitAll()
            .anyRequest().fullyAuthenticated();

    http
            .formLogin()
            .loginPage("/login")
            .permitAll()
            .successHandler(authSuccessHandler)
            .and()
            .logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/login")
            .deleteCookies("SESSION")
            .clearAuthentication(true)
            .invalidateHttpSession(true)
            .permitAll();

    http.sessionManagement()
            .maximumSessions(1)
            .and()
            .sessionCreationPolicy(SessionCreationPolicy.NEVER);

    http.headers().frameOptions().disable();
    http.csrf().disable();
}

1 Ответ

0 голосов
/ 25 февраля 2019

Вы можете избежать создания SPRING_SECURITY_SAVED_REQUEST, установив NullRequestCache, но я думаю, что это не сработает для вашего варианта использования.

или, по крайней мере, ограничит их определенным списком действительных конечных точек бэкэнда?

Это можно сделать, предоставив requestCache и установив RequestMatcher -

      final HttpSessionRequestCache requestCache = new HttpSessionRequestCache();
        requestCache.setRequestMatcher(new AntPathRequestMatcher("/**"));

    http
        .authorizeRequests()
            .antMatchers("/", "/home").permitAll()
            .anyRequest().authenticated()
            .and()
            .requestCache().requestCache(requestCache)
            .and()...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...