#java #spring #spring-security
Вопрос:
У меня есть такая конфигурация безопасности Spring, как эта:
@Override
public void configure(final AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder);
}
@Override
protected void configure(final HttpSecurity http) throws Exception {
http.cors().and().csrf().disable()
.authorizeRequests()
.antMatchers("/**").hasAuthority("Business_User")
.anyRequest().authenticated()
.and()
.formLogin()
.loginProcessingUrl("/login")
.usernameParameter("username")
.passwordParameter("password");
http.headers().frameOptions().disable();
}
Аутентификация работает нормально. Однако, если аутентификация не удалась из-за неверного пользователя или неправильного пароля, возвращается стандартная страница входа в систему Spring с кодом возврата 200.
Это не то, чего я ожидал.
Как я могу настроить Spring Security для возврата 401 и пустого тела ответа, если пользователь не вошел в систему?
Комментарии:
1. Похоже, вы не хотите использовать форму входа в систему. Вы можете удалить
.formLogin()
и вместо этого добавить.httpBasic()
или другую стратегию аутентификации, которую вы предпочитаете.
Ответ №1:
Вы можете сделать это, если проверка подлинности не удалась, служба безопасности spring обработает это, перенаправив вас на страницу входа в систему, но вы можете управлять этим, добавив следующий код:
http
.exceptionHandling()
.authenticationEntryPoint(new org.springframework.boot.autoconfigure.security.Http401AuthenticationEntryPoint("headerValue"));
или
вы также можете использовать HttpStatusEntryPoint следующим образом
http
.exceptionHandling()
.authenticationEntryPoint(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED))