一般的なクロスドメイン処理方式

クロスドメイン

元ポリシーの制約ブラウザ。元ポリシーが慣例である、それは同一生成元ポリシーの欠如、ブラウザの通常の機能が影響を受ける可能性がある場合は、ブラウザのコアは、また、最も基本的なセキュリティ機能です。元ポリシーは、別のドメインの相互作用にドメインjavascriptのスクリプトとコンテンツを防ぐことができます。いわゆる相同(同じでドメインを参照)は、2つのページが同じプロトコル、ホストとポート番号を持っています

  • URLとの間の場合、要求プロトコル、ドメイン名、クロスドメインとは異なる3つのポートのいずれか現在のページ

治療の選択肢

  • フロントエンドに作用します。SpringBoot + Vueのバックオフィス管理システム(A):プロジェクトを作成するために使用上の記事の最後に。

  • サーバ/フィルタ(フィルタ)でインターセプター(インターセプタ)を追加ヘッダを配置。例:

  • 迎撃機

      public class CORSInterceptor implements HandlerInterceptor {
      	@Override
      	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
      			throws Exception {
      		String Origin = request.getHeader("Origin");
      		response.setHeader("Access-Control-Allow-Origin", Origin);
      		response.setHeader("Access-Control-Allow-Credentials", "true");
      		response.setHeader("Access-Control-Allow-Headers", "Authorization,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type"); 
      		response.setHeader("Access-Control-Allow-Methods", "OPTIONS,GET,POST,DELETE,PUT"); 
              if(request.getMethod().equals("OPTIONS")) {
              	response.setStatus(200);
              	return false;
              }
      		return true;
      	}
      
      	@Override
      	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
      			ModelAndView modelAndView) throws Exception {
      
      	}
      
      	@Override
      	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
      			throws Exception {
      	}
      }
      // 注入配置Bean
      @Configuration
      public class WebMvcConfig implements WebMvcConfigurer {
      
      	@Bean
      	public CORSInterceptor corsInterceptor() {
      		return new CORSInterceptor();
      	}
      	
      	@Override
      	public void addInterceptors(InterceptorRegistry registry) {
      		registry.addInterceptor(corsInterceptor())
      				.addPathPatterns("/**");
      	}
      }
    复制代码
  • フィルタ

      @Component
      public class CORSFilter implements Filter {
       
          @Override
          public void destroy() { }
       
          @Override
          public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                  throws IOException, ServletException {
          	HttpServletRequest httpServletRequest = (HttpServletRequest)request;
          	String origin = httpServletRequest.getHeader("Origin");
              HttpServletResponse  httpServletResponse = (HttpServletResponse) response;
              httpServletResponse.setHeader("Access-Control-Allow-Origin", origin);
              httpServletResponse.setHeader("Access-Control-Allow-Credentials", "true");
              httpServletResponse.setHeader("Access-Control-Allow-Headers", "Authorization,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type"); 
              httpServletResponse.setHeader("Access-Control-Allow-Methods", "OPTIONS,GET,POST,DELETE,PUT"); 
              if(httpServletRequest.getMethod().equals("OPTIONS")) {
              	httpServletResponse.setStatus(200);
              }
              chain.doFilter(httpServletRequest, httpServletResponse);    
          }
       
          @Override
          public void init(FilterConfig arg0) throws ServletException { }
       }
    复制代码
  • nginxのプロキシ

      location /webview{
          # 注意:if () {}中间空格必须加上。 
          if ($request_method = 'OPTIONS') { 
              add_header Access-Control-Allow-Origin $http_origin always;
              add_header Access-Control-Allow-Credentials true;
              add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
              add_header Access-Control-Allow-Headers Authorization,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type;
              return 200;
          }
          alias /mypro/webview/dist;
          try_files $uri $uri/ @webview;
          index  index.html  index.htm;
          add_header Access-Control-Allow-Origin $http_origin always;
          add_header Access-Control-Allow-Credentials true;
          add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
          add_header Access-Control-Allow-Headers Authorization,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type;
      }
      location @webview{
          rewrite ^.*$ /webview/index.html last;
      }
    复制代码

概要:クロスドメインアクセスを解く - レスポンスヘッダを変更します。注意:*ワイルドカード記号をソースを使用しないでください。ペットクッキーは、ワイルドカードを使用することはできません設定*

おすすめ

転載: juejin.im/post/5d1209935188254f8e4240ab