Я использую конфигурацию Spring-boot для basic-auth, и когда я пытаюсь получить доступ к http://192.168.0.3/v1
с использованием учетных данных, я получаю сообщение об ошибке CORS, даже если у меня есть конфигурации для CORS.Странная вещь, когда я получаю доступ к http://192.168.0.3/v1/signup
, я могу создать пользователя.почему ошибка CORS только для доступа к корневому URL?
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
@ComponentScan(basePackages = { "com.ofloy.rest.security" })
@Import({CorsConfig.class})
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
@Override
protected AuthenticationManager authenticationManager() throws Exception {
return super.authenticationManager();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/signup/**").permitAll()
.anyRequest().authenticated()
.and().httpBasic()
.and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and().csrf().disable()
;
}
}
@Configuration
public class CorsConfig {
@Bean
public FilterRegistrationBean<Filter> customCorsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<Filter>(new CorsFilter(source));
bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
return bean;
}
}
Я использую UserDetailsService
для запроса реального пользователя из моей БД и задаю server.servlet.context-path = /v1/
В основном две проблемы, с которыми я сталкиваюсьс указанной выше конфигурацией:
- Я могу получить доступ к
http://192.168.0.3/v1/signup
, но не http://192.168.0.3/v1/
из браузера, так как получаю ошибку CORS. - Доступ к
http://192.168.0.3/v1
(из POSTMAN)используя учетные данные, чтобы проверить правильность учетных данных, дайте мне ошибку 404
.404
, если учетные данные верны, а 401
неверен.Почему 404
?
Примечание: одна вещь, которую я заметил для вторых проблем, - даже если я отправляю запрос POST на http://192.168.0.3/v1
, пружина Logs показывает это запрос GET, вот журналstack.
DEBUG DispatcherServlet: GET "/ v1 /", параметры = {}
WARN PageNotFound: Нет сопоставления для GET / v1 /
DEBUG DispatcherServlet: завершено 404 NOT_FOUND DEBUG DispatcherServlet:«ОШИБКА» для GET «/ v1 / error», параметры = {}
DEBUG RequestMappingHandlerMapping: сопоставлен с общедоступным org.springframework.http.ResponseEntity org.springframework.boot.autoconfigure.web.servlet.errorContler.r(javax.servlet.http.HttpServletRequest) Отладка HttpEntityMethodProcessor: использование 'application / json', заданное
[ / ] и поддерживаемое [application / json, application / * + json]
DEBUG HttpEntityorethodho: Запись [{timestamp = ср. 30 января 16:16:40 IST 2019, статус = 404, ошибка = не найдено, сообщение = сообщение недоступно, путь = / v1 /}]
DEBUG DispatcherServlet:Выход из отправки «ОШИБКА», статус 404
ОБНОВЛЕНИЕ: это ошибка CORS в браузере
Доступ к XMLHttpRequest по адресу http://192.168.43.70:8085/v1' из источника 'http://localhost:3007' заблокировано политикой CORS: Ответ на запрос предварительной проверки не проходит проверку контроля доступа: Перенаправление не разрешено для запроса предварительной проверки.