एज़्योर पर तैनात एंगुलर और स्प्रिंग बूट प्रोजेक्ट उम्मीद के मुताबिक काम नहीं कर रहे हैं


मैंने अपनी स्वयं की ऐप सेवा में कोणीय परियोजना को तैनात किया है और अपनी स्वयं की ऐप सेवा में स्प्रिंग बूट भी तैनात किया है, दोनों एप्लिकेशन स्थानीय रूप से ठीक काम करते हैं लेकिन समस्या उत्पादन पर आती है मुझे यह त्रुटि मिलती है “क्रॉस-ओरिजिनल अनुरोध अवरुद्ध: समान मूल नीति पढ़ने की अनुमति नहीं देती है https://minralsportal-api.azurewebsites.us/auth_api/authenticate पर दूरस्थ संसाधन। (कारण: CORS हेडर ‘Access-Control-Allow-Origin’ गायब है)। स्थिति कोड: 503” मुझे नहीं पता कि त्रुटि कहां आती है चूंकि मैंने स्प्रिंग बूट में संसाधन साझाकरण और कॉर्सफ़िल्टर क्लास को सक्षम करने के लिए क्रॉस-ओरिजिन क्लास को कॉन्फ़िगर किया है, लेकिन मुझे एज़्योर (उत्पादन) पर यह त्रुटि मिल रही है, भले ही यह स्थानीय रूप से पूरी तरह से ठीक काम करता है।

मैंने क्या प्रयास किया है:

यहाँ मेरी 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() {}

}

यहाँ मेरी सुरक्षा कॉन्फिग क्लास है

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

बहुत सारी गूगलिंग के बाद भी मुझे वह सर्वोत्तम उत्तर नहीं मिल सका जो समस्या को हल करने में मेरी मदद कर सके, किसी भी सुझाव की मैं सराहना करूंगा।

और क्या एज़्योर में कोई ऐसा साधन है जिससे मैं दोनों एप्लिकेशन को एक ही जार फ़ाइल पर पैकेजिंग किए बिना एक ही ऐप सेवा (कोणीय + स्प्रिंग बूट) पर चलाने के लिए तैनात कर सकूं?

समाधान 1

समस्या आपके कोड में नहीं है, बल्कि समस्या आपकी तैनाती में है। आपने कहा है कि आपने अपना एप्लिकेशन Azure पर तैनात किया है, और यह अपेक्षाओं का अपना सेट लाता है। मूलतः, CORS अनुरोध को Azure द्वारा अवरुद्ध किया जा रहा है, आपके एप्लिकेशन द्वारा नहीं। आपको स्वयं CORS क्षमता का प्रबंधन करना होगा – दस्तावेज़ पर एक नज़र डालें यहाँ[^] यह समझने के लिए कि आप Azure में CORS को कैसे प्रबंधित कर सकते हैं।

[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をコピーしました