Các dự án khởi động góc và lò xo đã triển khai trên Azure không hoạt động như mong đợi

lập trình


Tôi đã triển khai dự án góc cạnh trong dịch vụ ứng dụng của chính nó và cũng đã triển khai khởi động mùa xuân trong dịch vụ ứng dụng của riêng mình, hai ứng dụng hoạt động tốt cục bộ nhưng sự cố xảy ra trong quá trình sản xuất. Tôi gặp lỗi này “Yêu cầu nguồn gốc chéo bị chặn: Chính sách xuất xứ tương tự không cho phép đọc tài nguyên từ xa tại https://mineralsportal-api.azurewebsites.us/auth_api/authenticate. (Lý do: thiếu tiêu đề CORS ‘Access-Control-Allow-Origin’). Mã trạng thái: 503” Tôi không biết lỗi xảy ra ở đâu kể từ khi tôi định cấu hình lớp có nguồn gốc chéo để cho phép chia sẻ tài nguyên và lớp corsFilter trong spring boot nhưng tôi gặp phải lỗi này trên Azure (sản xuất) mặc dù nó hoạt động hoàn toàn tốt ở cục bộ.

Những gì tôi đã thử:

Đây là lớp corsConfig của tôi

@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("*");
            }
        };
    }
}

Đây là lớp corsFilter của tôi

@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() {}

}

Đây là lớp securityConfig của tôi

@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);
    }
}

Sau rất nhiều lần tìm kiếm trên Google, tôi không thể nhận được câu trả lời tốt nhất có thể giúp tôi giải quyết vấn đề, mọi đề xuất đều được tôi đánh giá cao.

và có phương tiện nào trong Azure để tôi có thể triển khai cả hai ứng dụng để chạy trên cùng một dịch vụ ứng dụng (khởi động góc + lò xo) mà không cần đóng gói chúng trên cùng một tệp jar không?

Giải pháp 1

Vấn đề không nằm ở mã của bạn, mà vấn đề là ở việc triển khai của bạn. Bạn đã tuyên bố rằng bạn đã triển khai ứng dụng của mình lên Azure và điều này mang lại những kỳ vọng riêng. Về cơ bản, yêu cầu CORS đang bị Azure chặn chứ không phải bởi ứng dụng của bạn. Những gì bạn cần làm là tự mình quản lý khả năng CORS – hãy xem tài liệu đây[^] để hiểu cách bạn có thể quản lý CORS trong 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をコピーしました