SpringBoot 에서 도 메 인 을 뛰 어 넘 는 5 가지 방식 의 소결 을 실현 합 니 다.

1.왜 크로스 필드 문제 가 발생 합 니까?
브 라 우 저의 동원 정책 제한 에서 비롯 되 었 습 니 다.같은 소스 정책(Sameoriginpolicy)은 브 라 우 저의 가장 핵심 적 이 고 기본 적 인 보안 기능 으로 같은 소스 정책 이 없 으 면 브 라 우 저의 정상 적 인 기능 이 영향 을 받 을 수 있 습 니 다.웹 은 같은 소스 정책 을 바탕 으로 구 축 된 것 이 라 고 할 수 있 습 니 다.브 라 우 저 는 같은 소스 정책 에 대한 실현 일 뿐 입 니 다.
같은 소스 정책 은 한 도 메 인의 자바 script 스 크 립 트 와 다른 도 메 인의 내용 이 상호작용 하 는 것 을 막 습 니 다.동원(즉 같은 도 메 인 에서)이란 두 페이지 가 같은 프로 토 콜(protocol),호스트(host)와 포트 번호(port)를 가지 고 있다 는 것 이다.
2.무엇이 크로스 필드 입 니까?
url 을 요청 하 는 프로 토 콜,도 메 인 이름,포트 세 가지 중 하 나 는 현재 페이지 url 과 다 르 면 크로스 필드 입 니 다.

3.비 동원 제한
【1】원본 이 아 닌 웹 페이지 의 Cookie,LocalStorage,IndexedDB 를 읽 을 수 없습니다.
[2]비 동원 홈 페이지 의 DOM 을 접 할 수 없습니다.
【3】비 동원 주소 로 AJAX 요청 을 보 낼 수 없습니다.
4.자바 백 엔 드 에서 CORS 크로스 도 메 인 요청 을 실현 하 는 방식
CORS 의 크로스 도 메 인 요청 에 대해 다음 과 같은 몇 가지 방법 으로 선택 할 수 있 습 니 다.
  • 새로운 CorsFilter
  • 로 돌아 가기
  • WebMvcConfigure 재 작성
  • 주석 사용@CrossOrigin
  • 응답 헤드 수 동 설정(HttpServletResponse)
  • 자체 웹 filter 크로스 도 메 인 실현
  • 주의:
  • CorFilter/WebMvConfigurer/@CrossOrigin 은 SpringMVC 4.2 이상 버 전이 있어 야 지원 되 며,springBoot 1.3 이상
  • 에 대응 합 니 다.
  • 위의 두 가지 방식 은 전역 CORS 설정 에 속 하고 뒤의 두 가 지 는 국부 CORS 설정 에 속한다.부분 크로스 도 메 인 을 사용 하면 전역 크로스 도 메 인 을 덮어 쓰 는 규칙 이 므 로@CrossOrigin 주 해 를 통 해 입자 도가 높 은 크로스 도 메 인 자원 통 제 를 할 수 있 습 니 다.
  • 사실은 어떤 방안 이 든 최종 목적 은 응답 헤드 를 수정 하고 응답 헤드 에 브 라 우 저가 요구 하 는 데 이 터 를 추가 하여 크로스 필드 를 실현 하 는 것 이다.
  • 1.새로운 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);
      }
    }
    
    2.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("*");
      }
    }
    
    3.주석 사용(부분 크로스)
    컨트롤 러(클래스)에 주 해 를 사용 합 니 다@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";
      }
    
    4.응답 헤드 수 동 설정(부분 크로스)
    HttpServletResponse 대상 에 응답 헤더(Access-Control-Allow-Origin)를 추가 하여 원본 도 메 인 에 권한 을 부여 합 니 다.여기 서 Origin 의 값 도"*"로 설정 하여 모든 줄 을 표시 할 수 있 습 니 다.추천:150 개의 흔 한 자바 면접 문제 분해 모음
    
    @RequestMapping("/index")
    public String index(HttpServletResponse response) {
      response.addHeader("Access-Allow-Control-Origin","*");
      return "index";
    }
    
    5.사용자 정의 filter 를 사용 하여 크로스 필드 구현
    먼저 필 터 를 만 듭 니 다.MyCorsFilter.java 라 는 이름 을 지 을 수 있 습 니 다.
    
    package com.mesnac.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() {}
    }
    
    웹.xml 에 이 필 터 를 설정 하여 2021 자바 면접 보전 을 적용 합 니 다.
    
    <!--      START-->
    <filter>
     <filter-name>CorsFilter</filter-name>
     <filter-class>com.mesnac.aop.MyCorsFilter</filter-class>
    </filter>
    <filter-mapping>
     <filter-name>CorsFilter</filter-name>
     <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!--      END -->
    
    스프링 부 트 에서 크로스 오 버 를 실현 하 는 5 가지 방식 의 소결 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 스프링 부 트 크로스 오 버 에 관 한 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부탁드립니다!

    좋은 웹페이지 즐겨찾기