Proyek boot sudut dan pegas yang diterapkan di Azure tidak berfungsi seperti yang diharapkan

pemrograman


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.]

コメント

タイトルとURLをコピーしました