복붙노트

[SPRING] 스프링 부트 보안 요청한 리소스에 'Access-Control-Allow-Origin'헤더가 없습니다. Error

SPRING

스프링 부트 보안 요청한 리소스에 'Access-Control-Allow-Origin'헤더가 없습니다. Error

Spring Security로 Spring Boot 애플리케이션을 만들고 있습니다. 자바 스크립트의 가져 오기 API를 사용하여 AJAX 요청을 통해 삭제 기능이 삭제되었습니다. 이 기능은 Chrome 및 Firefox에서 올바르게 작동하지만 Opera에서는 문제가 발생합니다. 앞서 언급했듯이 'No'Access-Control-Allow-Origin '헤더가 요청 된 리소스에 있습니다'라는 오류가 콘솔에 표시됩니다.

검색 한 이유는 CORS 때문입니다. 브라우저는 일반적으로 AJAX 요청이 다른 출처를 허용하지 않지만 삭제 요청은 동일한 도메인에 있습니다. Chrome / Firefox에서 작동하면 Opera가 아닌 이유를 궁금합니다. .

이제 코어와 관련된 문제가 있다면 다른 브라우저에서는 작동하지 않기 때문에 애플리케이션과 관련된 코드를 공유하지 않을 것입니다. 그러나 어떤 코드가 공유되어야하는 경우, 말하십시오, 그래서 나는 공유 할 것입니다. 하지만 지금은 무엇이 잘못되었는지조차 알지 못합니다. 미리 감사드립니다.

해결법

  1. ==============================

    1.필터를 구현하여 모든 헤더를 허용 할 수 있습니다.

    필터를 구현하여 모든 헤더를 허용 할 수 있습니다.

    다음과 같이 시도해보십시오.

    @Component
    @Order(Ordered.HIGHEST_PRECEDENCE)
    public class CORSFilter implements Filter {
    
    
        @Override
        public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
            HttpServletResponse response = (HttpServletResponse) res;
            HttpServletRequest request = (HttpServletRequest) req;
            response.setHeader("Access-Control-Allow-Origin", "*");
            response.setHeader("Access-Control-Allow-Methods", "*");
            response.setHeader("Access-Control-Max-Age", "3600");
            response.setHeader("Access-Control-Allow-Headers", "*");
            //response.setHeader("Access-Control-Expose-Headers","yourCustomHeaderIfExist");
    
            if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
                response.setStatus(HttpServletResponse.SC_OK);
            } else {
                chain.doFilter(req, res);
            }
        }
    
        @Override
        public void init(FilterConfig filterConfig) {
        }
    
        @Override
        public void destroy() {
        }
    
    }
    

    컨트롤러 앞에 @CrossOrigin 주석을 추가하십시오.

    이 bean 추가로 시도 할 수도 있습니다.

     @Bean
            public WebMvcConfigurer corsConfigurer() {
                return new WebMvcConfigurerAdapter() {
                    @Override
                    public void addCorsMappings(CorsRegistry registry) {
                        registry.addMapping("/**").allowedOrigins("*").allowedMethods("GET", "POST","PUT", "DELETE");
    
    
                    }
                };
            }
    
  2. from https://stackoverflow.com/questions/51802102/spring-boot-security-no-access-control-allow-origin-header-is-present-on-the-r by cc-by-sa and MIT license