#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-форму.
Ответ №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 по форме входа в систему, чтобы понять, как работают потоки. На самом деле это больше, чем я объяснил здесь.