В моем приложении 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);
}
}




Удалите 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;
}
да. вам нужно добавить этот bean-компонент в класс SecurityConfig. вам не нужно что-то менять в этом bean-компоненте ..
Но он просит изменить тип возвращаемого значения на UrlBasedCorsConfigurationSource.
Нет, потому что класс UrlBasedCorsConfigurationSource реализует CorsConfigurationSource, который является интерфейсом, так что это не проблема docs.spring.io/spring-framework/docs/current/javadoc-api/org /…
да, вы правы. Тип возвращаемого значения менять не нужно. Однако я попытался поместить данный bean-компонент в класс SecurityConfig. Но в мобильном браузере по-прежнему возникает та же ошибка.
Да, в браузере на моем компьютере все работает нормально. Я могу создавать записи.
Позвольте нам продолжить обсуждение в чате.
Пока не устраняю их
Я заметил, что эта ошибка возникает только при создании записей с изображением
Мне нужно изменить тип возвращаемого значения метода? Поскольку «источник» находится в типе UrlBasedCorsConfigurationSource. Кроме того, мне нужно добавить этот bean-компонент в класс SecurityConfig, не так ли?