SpringBoot 크로스 오 버 해결 5 가지 방식 소결

무엇이 크로스 필드 입 니까?
크로스 필드:브 라 우 저가 다른 사이트 의 스 크 립 트 를 실행 할 수 없 음 을 말 합 니 다.이것 은 브 라 우 저의 동원 정책 으로 인해 발생 한 것 으로 브 라 우 저가 javascript 에 가 하 는 안전 제한 입 니 다.
예 를 들 어 a 페이지 가 b 페이지 자원 을 가 져 오 려 면 a,b 페이지 의 프로 토 콜,도 메 인 이름,포트,하위 도 메 인 이름 이 다 르 면 방문 하 는 행동 은 모두 도 메 인 을 뛰 어 넘 는 것 이 고 브 라 우 저 는 안전 문 제 를 위해 도 메 인 을 뛰 어 넘 는 방문 을 제한 합 니 다.즉,도 메 인 을 뛰 어 넘 는 요청 자원 을 허용 하지 않 습 니 다.메모:도 메 인 간 접근 제한 은 브 라 우 저의 제한 입 니 다.그 걸 이해 하 는 게 중요 해!!
동원 정책:프로 토 콜,도 메 인 이름,포트 가 모두 같 아야 하 는데 그 중 하 나 는 다 르 면 크로스 필드 가 발생 합 니 다.

자바 CORS 크로스 도 메 인 요청 해결 방법
CORS 의 크로스 도 메 인 요청 에 대해 다음 과 같은 몇 가지 방법 으로 선택 할 수 있 습 니 다.
  • 새로운 CorsFilter
  • 로 돌아 가기
  • WebMvcConfigure 재 작성
  • 주석 사용@CrossOrigin
  • 응답 헤드 수 동 설정(HttpServletResponse)
  • 자체 웹 filter 크로스 도 메 인 실현
  • 주의:
  • CorFilter/WebMvConfigure/@CrossOrigin 은 SpringMVC 4.2 이상 버 전이 있어 야 지원 되 며,springBoot 1.3 이상 에 대응 합 니 다.
  • 위의 두 가지 방식 은 전역 CORS 설정 에 속 하고 뒤의 두 가 지 는 국부 CORS 설정 에 속한다.부분 크로스 도 메 인 을 사용 하면 전역 크로스 도 메 인 을 덮어 쓰 는 규칙 이 므 로@CrossOrigin 주 해 를 통 해 입자 도가 높 은 크로스 도 메 인 자원 통 제 를 할 수 있 습 니 다.
  • 사실은 어떤 방안 이 든 최종 목적 은 응답 헤드 를 수정 하고 응답 헤드 에 브 라 우 저가 요구 하 는 데 이 터 를 추가 하여 크로스 필드 를 실현 하 는 것 이다.
  • 새 CorsFilter 되 돌리 기(전역)
    임의의 설정 클래스 에서 새로운 CorsFIlter Bean 을 되 돌려 주 고 맵 경로 와 구체 적 인 CORS 설정 경 로 를 추가 합 니 다.
    
    @Configuration
    public class GlobalCorsConfig {
    
        @Bean
        public CorsFilter corsFilter() {
            //1.    CORS    
            CorsConfiguration config = new CorsConfiguration();
            //       
            config.addAllowedOrigin("*");
            //     Cookie
            config.setAllowCredentials(true);
            //        
            config.addAllowedMethod("*");
            //            
            config.addAllowedHeader("*");
            //        
            config.addExposedHeader("*");
            //2.       
            UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();
            corsConfigurationSource.registerCorsConfiguration("/**",config);
            //3.     CorsFilter
            return new CorsFilter(corsConfigurationSource);
        }
    }
    WebMvcConfigurer 다시 쓰기(전역 전역)
    
    @Configuration
    public class CorsConfig implements WebMvcConfigurer {
    
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                    //    Cookie
                    .allowCredentials(true)
                    //       
                    .allowedOrigins("*")
                    .allowedMethods(new String[]{"GET", "POST", "PUT", "DELETE"})
                    .allowedHeaders("*")
                    .exposedHeaders("*");
        }
    }
    
    
    주석 사용(부분 크로스 필드)
    컨트롤 러(클래스)에 주 해 를 사용 합 니 다@CrossOrigin:이 클래스 의 모든 방법 이 도 메 인 을 넘 을 수 있 음 을 표시 합 니 다.
    
    @RestController
    @CrossOrigin(origins = "*")
    public class HelloController {
    
        @RequestMapping("/hello")
        public String hello() {
            return "hello world";
        }
    }
    
    
    방법 에 주 해 를 사용 합 니 다@CrossOrigin:
    
      @RequestMapping("/hello")
      @CrossOrigin(origins = "*")
       //@CrossOrigin(value = "http://localhost:8081") //    ip    
      public String hello() {
            return "hello world";
      }
    
    응답 헤드 수 동 설정(부분 크로스 필드)
    HttpServletResponse 대상 에 응답 헤더(Access-Control-Allow-Origin)를 추가 하여 원본 도 메 인 에 권한 을 부여 합 니 다.여기 서 Origin 의 값 도"*"로 설정 하여 모든 줄 을 표시 할 수 있 습 니 다.
    
    @RequestMapping("/index")
    public String index(HttpServletResponse response) {
    
        response.addHeader("Access-Allow-Control-Origin","*");
        return "index";
    }
    
    
    사용자 정의 filter 를 사용 하여 크로스 필드 구현
    먼저 필 터 를 만 듭 니 다.MyCorsFilter.java 라 는 이름 을 지 을 수 있 습 니 다.
    
    package cn.wideth.aop;
    
    import java.io.IOException;
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletResponse;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MyCorsFilter implements Filter {
    
      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, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type");
        chain.doFilter(req, res);
        
      }
      
      public void init(FilterConfig filterConfig) {}
      public void destroy() {}
    }
    본문 소결
    본 고 는 SpringBoot 가 도 메 인 을 뛰 어 넘 는 5 가지 방식 을 소 개 했 는데 본인 이 가장 많이 사용 하 는 것 은 세 번 째 입 니 다.
    여기 서 SpringBoot 가 크로스 도 메 인 을 해결 하 는 5 가지 방식 의 소결 에 관 한 글 을 소개 합 니 다.더 많은 SpringBoot 가 크로스 도 메 인 을 해결 하 는 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기