[ad_1]
Implementé el proyecto angular en su propio servicio de aplicaciones y también implementé Spring Boot en su propio servicio de aplicaciones. Las dos aplicaciones funcionan bien localmente pero el problema surge en producción. Recibo este error “Solicitud de origen cruzado bloqueada: la política del mismo origen no permite leer el recurso remoto en https://mineralsportal-api.azurewebsites.us/auth_api/authenticate. (Motivo: falta el encabezado CORS ‘Access-Control-Allow-Origin’). Código de estado: 503” No sé de dónde viene el error desde que configuré la clase de origen cruzado para habilitar el uso compartido de recursos y la clase corsFilter en Spring Boot, pero recibo este error en Azure (producción) a pesar de que funciona perfectamente bien localmente.
Lo que he probado:
Aquí está mi clase corsConfig
@Configuration public class CorsConfig { @Bean public WebMvcConfigurer corsConfigurer(){ return new WebMvcConfigurer() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**").allowedMethods("GET", "POST", "PUT", "DELETE") .allowedOrigins("*") .allowedHeaders("*"); } }; } }
Aquí está mi clase corsFilter
@Component public class CorsFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE, PATCH"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); response.setHeader("Access-Control-Expose-Headers", "Location"); chain.doFilter(req, res); } @Override public void init(FilterConfig filterConfig) {} @Override public void destroy() {} }
Aquí está mi clase securityConfig
@Configuration @EnableWebSecurity @SuppressWarnings("deprecation") public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private CustomUserService userService; @Autowired private RequestFilter requestFilter; @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userService); } @Bean @Override public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); } @Override protected void configure(HttpSecurity http) throws Exception { http.cors().disable(); http.csrf().disable(); http.authorizeRequests().antMatchers("/auth_api/authenticate").permitAll().anyRequest().authenticated() .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); http.addFilterBefore(requestFilter, UsernamePasswordAuthenticationFilter.class); } }
Después de buscar mucho en Google, no pude obtener la mejor respuesta que pudiera ayudarme a resolver el problema. Cualquier sugerencia será muy apreciada.
¿Y hay algún medio en Azure para implementar ambas aplicaciones para que se ejecuten en el mismo servicio de aplicación (angular + spring boot) sin empaquetarlas en el mismo archivo jar?
Solución 1
El problema no está en su código, sino en su implementación. Ha declarado que implementó su aplicación en Azure y esto conlleva su propio conjunto de expectativas. Básicamente, la solicitud CORS está bloqueada por Azure, no por su aplicación. Lo que debe hacer es administrar la capacidad CORS usted mismo; consulte la documentación aquí[^] para comprender cómo se puede administrar CORS en Azure.
[Edit – I posted this response without seeing that this was an old question. The answer still stands though, and could be useful to others in the future.]
[ad_2]
コメント