インターフェースのドメイン間のアクセス完全解決策(java五種類のドメイン間ソリューション)


  • .jsonpを使ってサイトを解決します.
  • にまたがります.
  • .HttpClientを使って内部転送
  • .設定応答ヘッダを使用して、ドメインをまたぐことができる
  • .
  • .Ngixに基づいて企業級APIインターフェースゲートウェイ
  • を構築する.
  • .Zuulを使用してマイクロサービスAPIインターフェースゲートウェイを構築する(図示せず)
  • 一、JSONPを使う
    短所:ポストの要求に対応していません.コードの書き込みが複雑です.ajaxはjsonpに変更されました.
  • dataType:「json」
  • json:「jsonpCallback」
  • type:「GET」は以下の通りです.
  • 
    
    
    	$(document).ready(function() {
    		$.ajax({
    			type : "GET",
    			async : false,
    			url : "http://b.itmayiedu.com:8081/ajaxB",
    			dataType : "jsonp",
    			jsonp : "jsonpCallback", //       callback   function     
    			success : function(data) {
    				alert(data["errorCode"]);
    			},
    			error : function() {
    				alert('fail');
    			}
    		});
    	});
    
    
    バックグラウンドコード
  • jsonpCallbackはjsonpのために生成されたパラメータ
  • である.
    @RequestMapping(value = "/ajaxB", method = RequestMethod.GET)
    	public void ajaxB(HttpServletResponse response, String jsonpCallback) throws IOException {
    		
    		JSONObject root = new JSONObject();
    		root.put("errorCode", "200");
    		root.put("errorMsg", "    ");	
    		
    		response.setHeader("Content-type", "text/html;charset=UTF-8");
    		PrintWriter writer = response.getWriter();
    		//   jsonp         ,jsonp    
    		writer.print(jsonpCallback + "(" + root.toString() + ")");
    		writer.close();
    	}
    
    二、ヘッド応答を設定する
  • は、応答ヘッダを設定し、ドメインをまたぐことができるようにする(*すべての要求がドメインをまたぐことを許可することを示す)
  • .
  • レスポンス.set Header(「Access-Coontrol-Origin」);
  • は、フィルタ
  • に置くことを推奨する.
    @RequestMapping("/ajaxB")
    public Map ajaxB(HttpServletResponse response) {
    
        //     
    	response.setHeader("Access-Control-Allow-Origin", "*");
    	
    	Map result = new HashMap();
    	result.put("errorCode", "200");
    	result.put("errorMsg", "    ");
    	return result;
    }
    
    三、Http Client転送
    HttpClientは具体的なロジックを要求します.maven依存は見ることができます.https://blog.csdn.net/qq_41463655/articale/detail/89637160
  • AプロジェクトはBプロジェクトに転送されます.(Aプロジェクトはフロントプロジェクトにアクセスするサーバと同じです.)
  • @RequestMapping("/forwardB")
    	@ResponseBody
    	public JSONObject forwardB() {
    		JSONObject result = HttpClientUtils.httpGet("http://b.itmayiedu.com:8081/ajaxB");
    		System.out.println("result:" + result);
    		return result;
    	}
    
  • Bプロジェクト(Bプロジェクトは具体的な業務論理コードを実行するサーバと同じ)
  • @RequestMapping("/ajaxB")
    public Map ajaxB(HttpServletResponse response) {
    		response.setHeader("Access-Control-Allow-Origin", "*");
    		Map result = new HashMap();
    		result.put("errorCode", "200");
    		result.put("errorMsg", "    ");
    		return result;
    	}
    
    四、NginxはAPIインターフェースゲートウェイを構築する.
  • アクセスwww.baidu.com/a走Aプロジェクトと同じです.http://a.baidu.com:8080/
  • アクセスwww.baidu.com/b走Bプロジェクトと同じです.http://b.baidu.com:8081/
  • 両プロジェクトは同じドメイン名の下でwww.baidu.comです.ドメインをまたぐ問題はありません.
      server {
            listen       80;
            server_name  www.baidu.com;
    
    		###A  
            location /a {
                proxy_pass   http://a.baidu.com:8080/;
                index  index.html index.htm;
            }
    		###B  
    		 location /b {
                proxy_pass   http://b.baidu.com:8081/;
                index  index.html index.htm;
            }
        }