システムを構築する際、システム A の JS コードがシステム B のインターフェースを呼び出す必要がある場合があり、これによりクロスドメイン現象が発生します。ドメイン
の問題、これは少し「代理店」を意味します。
public String httpPost(String urlStr,Map<String,String> params){ URL connect; StringBuffer data = new StringBuffer(); try { connect = new URL(urlStr); HttpURLConnection connection = (HttpURLConnection)connect.openConnection(); connection.setRequestMethod("POST"); connection.setDoOutput(true); connection.setDoInput(true); connection.setUseCaches(false);//post不能使用缓存 connection.setInstanceFollowRedirects(true); connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); OutputStreamWriter paramout = new OutputStreamWriter( connection.getOutputStream(),"UTF-8"); String paramsStr = ""; //拼接Post 请求的参数 for(String param : params.keySet()){ paramsStr += "&" + param + "=" + params.get(param); } if(!paramsStr.isEmpty()){ paramsStr = paramsStr.substring(1); } paramout.write(paramsStr); paramout.flush(); BufferedReader reader = new BufferedReader(new InputStreamReader( connection.getInputStream(), "UTF-8")); String line; while ((line = reader.readLine()) != null) { data.append(line); } paramout.close(); reader.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return data.toString(); }
背景: 当社のシステムでは、外部から参照します 開発済み提案システムでは、ユーザーがコメントまたは返信を与えられた後、未読メッセージの数が私のメッセージに表示されます。
達成された効果: 提案システム内の未読メッセージの数が 0 より大きい場合、システムが提案を導入する場所に未読メッセージがあることを示す赤い点が表示されます。システム。
提案システムのバックエンドでは、未読メッセージ数 (json 形式) を取得するために countBlog インターフェイスを作成しました。
システムのフロントエンドでは、返された未読メッセージ 赤い点の表示を制御するためにメッセージの数を読み取ります。
実行後にクロスドメインの問題のバグを報告します。
方法 1: @ に注釈を付けるCrossOrigin
方法 2: addCorsMappings 構成
@Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS") .allowCredentials(true) .maxAge(3600) .allowedHeaders("*"); }
欠点: この方法を使用してカスタム インターセプターを構成し、使用した後、クロスドメイン関連の構成が無効になります。
理由はリクエストの順序です。リクエストが到着すると、マッピングに入る代わりに最初にインターセプタに入ります。そのため、返されるヘッダー情報には設定されたクロスドメイン情報がありません。ブラウザはクロスドメイン例外を報告します。
方法 3: CorsFilter フィルターを使用する
private CorsConfiguration corsConfig() { CorsConfiguration corsConfiguration = new CorsConfiguration(); * 请求常用的三种配置,*代表允许所有,当时你也可以自定义属性(比如header只能带什么,只能是post方式等等) */ corsConfiguration.addAllowedOrigin("*"); corsConfiguration.addAllowedHeader("*"); corsConfiguration.addAllowedMethod("*"); corsConfiguration.setAllowCredentials(true); corsConfiguration.setMaxAge(3600L); return corsConfiguration; } @Bean public CorsFilter corsFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", corsConfig()); return new CorsFilter(source); }
以上がJava バックグラウンド呼び出しインターフェイスを解決し、クロスドメインの問題を処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。