[ad_1]
Saya telah menerapkan proyek sudut di layanan aplikasinya sendiri dan juga menerapkan booting pegas di layanan aplikasinya sendiri. Kedua aplikasi berfungsi dengan baik secara lokal tetapi masalahnya muncul saat produksi. Saya mendapatkan kesalahan ini “Permintaan Lintas Asal Diblokir: Kebijakan Asal yang Sama tidak mengizinkan membaca sumber daya jarak jauh di https://mineralsportal-api.azurewebsites.us/auth_api/authenticate. (Alasan: header CORS ‘Access-Control-Allow-Origin’ hilang). Kode status: 503” Saya tidak tahu dari mana kesalahan itu berasal sejak saya mengonfigurasi kelas lintas asal untuk mengaktifkan berbagi sumber daya dan kelas corsFilter di boot musim semi tetapi saya mendapatkan kesalahan ini di Azure (produksi) meskipun berfungsi dengan baik secara lokal.
Apa yang saya coba:
Ini kelas corsConfig saya
@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("*"); } }; } }
Ini kelas corsFilter saya
@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() {} }
Ini kelas securityConfig saya
@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); } }
Setelah banyak googling saya tidak bisa mendapatkan jawaban terbaik yang dapat membantu saya menyelesaikan masalah ini, saran apa pun akan sangat saya hargai.
dan apakah ada cara di Azure agar saya dapat menerapkan kedua aplikasi agar berjalan pada layanan aplikasi yang sama (angular + spring boot) tanpa mengemasnya pada file jar yang sama?
Solusi 1
Masalahnya bukan pada kode Anda, melainkan masalahnya pada penerapan Anda. Anda telah menyatakan bahwa Anda menyebarkan aplikasi Anda ke Azure, dan ini membawa ekspektasi tersendiri. Pada dasarnya, permintaan CORS diblokir oleh Azure, bukan oleh aplikasi Anda. Yang perlu Anda lakukan adalah mengelola sendiri kemampuan CORS – lihat dokumentasinya Di Sini[^] untuk memahami bagaimana Anda dapat mengelola CORS di 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]
コメント