Как получить тело http-запроса / ответа в виде журнала в Spring security при сбое входа в систему

#java #spring-boot #logging #spring-security

#java #spring-boot #ведение журнала #spring-безопасность

Вопрос:

Я пытаюсь получить журнал http-запроса / ответа в spring security. Это не проблема, если вход в систему выполнен успешно. Но при сбое входа в систему я не могу получить тело. Я использую slf4j из библиотеки журналов lombok и zalando.

Это моя конфигурация spring-security:

  @Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .csrf().disable()
            .authorizeRequests()
            .antMatchers("/test/get/**").hasAnyRole("USER")
            .antMatchers("/test/get-all").hasRole("ADMIN")
            .antMatchers("/test/save").hasRole("ADMIN")
            .and()
            .formLogin()
            .permitAll()
            .and()
            .httpBasic();
}
 

При успешном входе в систему я получаю такие журналы (есть тело ответа):

 {"origin":"local","type":"response","body":"I am saving {"str": "Hello world"rn}"}
 

При сбое входа в систему я получаю ответ без тела:

 {"origin":"local","type":"response", "X-XSS-Protection":["1; mode=block"]}}
 

Как получить тело ответа / запроса при сбое входа в систему?

Комментарии:

1. При сбое входа в систему тела нет.

2. @M.Deinum, что, если я использую security для метода POST?

3. Тела ответа нет, независимо от того, как вы отправляете материал.

Ответ №1:

Кажется, что вы используете formLogin() , поэтому вы можете сделать это:

 http
    .formLogin()
        .failureHandler((req, res, authentication) -> /*do whatever you want with req, res and authentication*/)
    ...
 

AuthenticationFailureHandler Интерфейс определяет один метод, в котором вам доступны HTTP-запрос, ответ и объект аутентификации.

void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception)