Имя пользователя Spring Security пусто при авторизации с помощью POST, но работает с PUT и GET

#spring-boot #http #spring-security #postman

#spring-boot #http #spring-security #postman

Вопрос:

СЦЕНАРИЙ: Я реализовал базовую аутентификацию с помощью spring security. Я сгенерировал форму входа и базовую аутентификацию http. Поэтому, когда я хочу отправить новые данные, которые представляют собой файл JSON в моем Requestbody, я работаю только с Put и GEt, но не с Post.

ОШИБКА: Когда я использую метод Post (я тестирую с postman), имя пользователя в my loadUserByUsername(String username) всегда пустое. Когда я выполняю тот же вызов с помощью Get или Put, имя пользователя является таким, каким оно должно быть.

Код:

Я не совсем уверен, какие части кода могут быть полезны, потому что все, кажется, происходит за кулисами. Поэтому я надеюсь, что SpringSecurityConfic может помочь

 @Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable();
    http.authorizeRequests().antMatchers("/**").permitAll().anyRequest().authenticated().and().httpBasic().authenticationEntryPoint(entryPoint);
    http.addFilterAt(new CustomBasicAuthenticationFilter(authenticationManagerBean()), BasicAuthenticationFilter.class);
    http.formLogin().loginPage("/login").permitAll().failureUrl("/login").successHandler(new RoleBasedAuthenticationSuccessHandler());
    http.logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/login").invalidateHttpSession(true).deleteCookies("JSESSIONID").permitAll();
}
  

В моем файле SpringSecurotyConfiguration у меня есть http.csrf().disable(), но он все еще не работает.

есть все, о чем я должен позаботиться, когда я хочу использовать POST.

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

1. Можете ли вы предоставить соответствующий код?

2. Что такое CustomBasicAuthenticationFilter ? Почему бы не использовать фильтр по умолчанию для базовой аутентификации? Тем не менее, покажите свой запрос с заголовками. Отправляете ли вы Authentication заголовок с именем пользователя и паролем в кодировке BASE64?

3. Да, я добавляю параметры аутентификации в заголовок при использовании Post. CustomBasicAuthenticationFilter — это фильтр, который я вставил, чтобы отличать вход с мобильного устройства от входа через браузер. Это отлично работает с Get и put. Так что я не думаю, что это должно быть проблемой.