[ad_1]
لقد قمت بنشر مشروع angular في خدمة التطبيق الخاصة به وقمت أيضًا بنشر Spring Boot في خدمة التطبيق الخاصة به ويعمل التطبيقان بشكل جيد محليًا ولكن المشكلة تأتي في الإنتاج وأتلقى هذا الخطأ “تم حظر طلب Cross-Origin: نفس سياسة الأصل لا تسمح بقراءة المورد البعيد على https://mineralsportal-api.azurewebsites.us/auth_api/authenticate. (السبب: رأس CORS ‘Access-Control-Allow-Origin’ مفقود). رمز الحالة: 503” لا أعرف أين يأتي الخطأ منذ أن قمت بتكوين فئة cross-origin لتمكين مشاركة الموارد وفئة corsFilter في التمهيد الربيعي ولكني أتلقى هذا الخطأ في azure (الإنتاج) على الرغم من أنه يعمل بشكل جيد محليًا.
ما حاولت:
هذه هي فئة 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("*"); } }; } }
هذه هي فئة 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() {} }
هذه هي فئة 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); } }
بعد الكثير من البحث على Google، لم أتمكن من الحصول على أفضل إجابة يمكن أن تساعدني في حل المشكلة، وأي اقتراحات ستكون موضع تقدير كبير.
وهل هناك أي وسيلة في Azure يمكنني من خلالها نشر كلا التطبيقين للتشغيل على نفس خدمة التطبيق (التمهيد الزاوي + الربيع) دون تجميعهما في نفس ملف الجرة؟
الحل 1
المشكلة ليست في الكود الخاص بك، بل المشكلة في النشر الخاص بك. لقد ذكرت أنك قمت بنشر تطبيقك على Azure، وهذا يجلب مجموعة التوقعات الخاصة به. في الأساس، يتم حظر طلب CORS بواسطة Azure، وليس بواسطة التطبيق الخاص بك. ما عليك القيام به هو إدارة قدرة CORS بنفسك – قم بإلقاء نظرة على الوثائق هنا[^] لفهم كيف يمكنك إدارة CORS في 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]
コメント