[ad_1]
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.]
[ad_2]
コメント