Почему он показывает, что Origin не разрешен Access-Control-Allow-Origin только в мобильных веб-браузерах?

В моем приложении spring -boot + React отлично работает в настольном веб-браузере, но когда я создаю запись через мобильный (я использовал iPhone) веб-браузер, например Chrome или Safari, он показывает, что Origin 'http://www.example.com' не разрешен Access- Control-Allow-Origin ''. Я уже добавил Cors Mappings вроде

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    private final long MAX_AGE_SECS = 3600;

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("HEAD", "OPTIONS", "GET", "POST", "PUT", "PATCH", "DELETE")
                .maxAge(MAX_AGE_SECS);
    }
}

Кто-нибудь может помочь мне решить эту проблему?

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

    @Autowired
    CustomUserDetailsService customUserDetailsService;

    @Autowired
    private JwtAuthenticationEntryPoint unauthorizedHandler;

    @Bean
    public JwtAuthenticationFilter jwtAuthenticationFilter() {
        return new JwtAuthenticationFilter();
    }

    @Override
    public void configure(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
        authenticationManagerBuilder
                .userDetailsService(customUserDetailsService)
                .passwordEncoder(passwordEncoder());
    }

    @Bean(BeanIds.AUTHENTICATION_MANAGER)
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http
                .cors()
                    .and()
                .csrf()
                    .disable()
                .exceptionHandling()
                    .authenticationEntryPoint(unauthorizedHandler)
                    .and()
                .sessionManagement()
                    .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                    .and()
                .authorizeRequests()
                .antMatchers(HttpMethod.GET, "/api/brands/**", "/api/users/**")
                    .permitAll()
                    .antMatchers(
                        "/",
                        "/favicon.ico",
                        "/**/*.png",
                        "/**/*.gif",
                        "/**/*.svg",
                        "/**/*.jpg",
                        "/**/*.html",
                        "/**/*.css",
                        "/**/*.js"
                        ) .permitAll()
                    .antMatchers("/api/auth/**")
                        .permitAll()
                    .antMatchers("/api/user/checkUsernameAvailability", "/api/user/checkEmailAvailability")
                        .permitAll()
                        .antMatchers("/api/brands/**").permitAll()      
                        .antMatchers("/api/familys/**").permitAll()
                        .antMatchers("/api/models/**").permitAll()
                    .anyRequest()
                        .authenticated();

           http.addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
           }

}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
0
0
171
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Удалите WebMvcConfig класс и добавьте bean-компонент corsConfigurationSource в ваш SecurityConfig класс, который сможет устанавливать заголовки / методы и разрешать любые источники, используя "*", но если вы хотите разрешить конкретное происхождение, вы можете добавить его.

@Bean
public CorsConfigurationSource corsConfigurationSource() {
    CorsConfiguration configuration = new CorsConfiguration();
    configuration.setAllowedOrigins(Arrays.asList("*"));
    configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"));
    configuration.setAllowedHeaders(Arrays.asList("authorization", "content-type", "x-auth-token"));
    configuration.setExposedHeaders(Arrays.asList("x-auth-token"));
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", configuration);
    return source;
}

Мне нужно изменить тип возвращаемого значения метода? Поскольку «источник» находится в типе UrlBasedCorsConfigurationSource. Кроме того, мне нужно добавить этот bean-компонент в класс SecurityConfig, не так ли?

chk.buddi 06.01.2019 05:38

да. вам нужно добавить этот bean-компонент в класс SecurityConfig. вам не нужно что-то менять в этом bean-компоненте ..

Jonathan JOhx 06.01.2019 05:42

Но он просит изменить тип возвращаемого значения на UrlBasedCorsConfigurationSource.

chk.buddi 06.01.2019 05:45

Нет, потому что класс UrlBasedCorsConfigurationSource реализует CorsConfigurationSource, который является интерфейсом, так что это не проблема docs.spring.io/spring-framework/docs/current/javadoc-api/org‌ /…

Jonathan JOhx 06.01.2019 05:46

да, вы правы. Тип возвращаемого значения менять не нужно. Однако я попытался поместить данный bean-компонент в класс SecurityConfig. Но в мобильном браузере по-прежнему возникает та же ошибка.

chk.buddi 06.01.2019 05:55

Да, в браузере на моем компьютере все работает нормально. Я могу создавать записи.

chk.buddi 06.01.2019 05:59

Позвольте нам продолжить обсуждение в чате.

Jonathan JOhx 06.01.2019 06:00

Пока не устраняю их

chk.buddi 06.01.2019 07:20

Я заметил, что эта ошибка возникает только при создании записей с изображением

chk.buddi 06.01.2019 07:24

Другие вопросы по теме