В приложении Spring Boot все контроллеры снабжены аннотацией перекрестного происхождения, то есть @CrossOrigin("*")
. В WebSecurityConfigurerAdapter
проблему должен был решить следующий код:
@EnableWebSecurity
public class WebSecurity extends WebSecurityConfigurerAdapter {
protected void configure(HttpSecurity http) throws Exception {
http
.cors()
.and()
.csrf().disable()
.authorizeRequests()
.antMatchers(HttpMethod.POST, Constants.SIGN_UP_URL).permitAll()
.antMatchers(HttpMethod.GET, Constants.DOWNLOAD_IMAGE_URL).permitAll()
.antMatchers(HttpMethod.GET, Constants.CUSTOMER_APP).permitAll()
...
.anyRequest().authenticated()
.and()
.addFilter(new JWTAuthenticationFilter(authenticationManager()))
.addFilter(new JWTAuthorizationFilter(authenticationManager()))
// this disables session creation on Spring Security
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
@Bean
public CorsConfigurationSource corsConfigurationSource() {
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", new CorsConfiguration().applyPermitDefaultValues());
return source;
}
}
Это работает в одной среде, но в другой дает ошибку CORS, например:
Access to XMLHttpRequest at 'https://tracerpro.com:9091/api/v1/ethix/saveScreenAttibDetails' from origin 'https://tracerpro.com:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Access to XMLHttpRequest at from origin has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Я что-то пропустил?
Обновлять: Основное различие между двумя средами - это обратный прокси nginx. В среде, где он не работает, есть обратный прокси, где он работает, это просто http. Где это не работает, так это обратный прокси.
@dur, tracerpro - это не полный URL-адрес, так как я не хочу раскрывать реальный URL-адрес. Однако конечная точка вызывается из приложения Angular, доступного по адресу example.com:4200.
Нет, я имел ввиду второй URL: Access to XMLHttpRequest at from origin has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Его там нет.
@dur похоже, что мне нужно что-то сделать в конфигурации nginx, чтобы разрешить CORS. Однако в приложении так много конечных точек - только эта конечная точка создает проблемы.
Это опечатка или во втором сообщении об ошибке действительно отсутствуют URL-адреса?