ПОСЛЕ входа из Postman в Spring Security

#reactjs #authentication #post #spring-security #postman

#reactjs #аутентификация #Публикация #spring-безопасность #postman

Вопрос:

Итак, мы совсем новички в программировании, и мы делаем проект, в котором у нас есть серверная часть с Spring Security, а передняя часть будет в React. Я пытался отправить сообщение с именем пользователя и паролем в Spring Security, но я застрял, единственные возвраты, которые я получаю, — это 401 и 404.

Я не хочу, чтобы Spring Security отображал страницу входа в систему, я просто хочу иметь возможность ОТПРАВЛЯТЬ и получать сеанс и, в конце концов, Csrf и userId обратно.

 @Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    private final PasswordEncoder passwordEncoder;
    private final UserDetailsService userDetailsService;
    private final RestAuthEntryPoint restAuthEntryPoint;

    @Autowired
    public SecurityConfig(PasswordEncoder passwordEncoder, UserDetailsService userDetailsService, RestAuthEntryPoint restAuthEntryPoint) {
        this.passwordEncoder = passwordEncoder;
        this.userDetailsService = userDetailsService;
        this.restAuthEntryPoint = restAuthEntryPoint;
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .csrf().disable()
                .authorizeRequests()
                .antMatchers( "/api/user/login", "/login").permitAll()
                .anyRequest()
                .authenticated()
                .and()
                .exceptionHandling().authenticationEntryPoint(restAuthEntryPoint).and()
                .formLogin()
                .loginProcessingUrl("/api/user/login");

    }
 

Я заметил, что если я удалю:

 .exceptionHandling().authenticationEntryPoint(restAuthEntryPoint)
 

Postman вернет всю HTML-форму.

Изображение Postman

Ответ №1:

если мы посмотрим на вашу конфигурацию, это говорит нам следующее:

 .antMatchers( "/api/user/login", "/login").permitAll()
 

Мы разрешили все запросы к конечной /api/user/login точке и /login .

Я понятия не имею, что вы здесь делаете, поскольку вы не опубликовали код для restAuthEntryPoint .

 .exceptionHandling().authenticationEntryPoint(restAuthEntryPoint)
 

И здесь:

 .loginProcessingUrl("/api/user/login")
 

Вы определяете, что какая бы форма входа в систему, которую вы используете, если это форма входа по умолчанию spring или ваша пользовательская, написанная в react, будет FORM POST передавать информацию для входа в эту определенную конечную точку.

Если вы не хотите, чтобы spring предоставлял вам страницу входа в систему, я предлагаю вам этого не permittAll делать на /login странице. Я понятия не имею, как вы собираетесь размещать свое приложение, если сервер spring будет обслуживать ваше приложение react на одном хосте или если вы собираетесь размещать приложение и серверную часть на отдельных серверах.

В вашем приложении react, если вы хотите войти в систему, используя значения по умолчанию, вы выполняете FORM POST запрос /api/user/login и NOT отправляете сообщение в формате json. Содержит два поля a username и a password . И в случае успеха вы получите SESSION cookie обратно.

я предлагаю вам прочитать официальную документацию spring security по форме входа в систему, чтобы понять, как работают потоки. На самом деле это больше, чем я объяснил здесь.