Ошибка CORS для 192.168.0.3/v1, но не для 192.168.0.3/v1/signup - PullRequest
0 голосов
/ 30 января 2019

Я использую конфигурацию 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/

В основном две проблемы, с которыми я сталкиваюсьс указанной выше конфигурацией:

  1. Я могу получить доступ к http://192.168.0.3/v1/signup, но не http://192.168.0.3/v1/ из браузера, так как получаю ошибку CORS.
  2. Доступ к 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: Ответ на запрос предварительной проверки не проходит проверку контроля доступа: Перенаправление не разрешено для запроса предварительной проверки.

1 Ответ

0 голосов
/ 30 января 2019

Я бы сделал что-то вроде ниже на контроллере, который обрабатывает запрос:

@CrossOrigin(origins = "http://localhost:3007")
@RestController
@RequestMapping("/v1")
public class VoneController {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...