Apabila membina sistem, kadangkala kod js sistem A perlu memanggil antara muka sistem B, yang akan menyebabkan fenomena merentas domain boleh ditangani melalui panggilan latar belakang masalah
, ini bermakna sedikit "agensi".
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(); }
Latar belakang: Pada sistem kami, rujukan dari luar Dibangunkan sistem cadangan Dalam sistem cadangan, selepas pengguna diberi komen atau balasan, bilangan mesej yang belum dibaca dipaparkan dalam mesej saya.
Kesan yang dicapai: Apabila bilangan mesej yang belum dibaca dalam sistem cadangan lebih daripada 0, titik merah yang menunjukkan kehadiran mesej yang belum dibaca akan muncul di lokasi di mana sistem kami memperkenalkan cadangan sistem.
Di bahagian belakang sistem yang dicadangkan, kami menulis antara muka countBlog untuk mendapatkan bilangan mesej yang belum dibaca (format json)
Di bahagian hadapan sistem kami, kami memperkenalkan antara muka untuk lulus kembali mesej yang belum dibaca Baca bilangan mesej untuk mengawal paparan titik merah
Laporkan pepijat merentas domain selepas dijalankan:
Kaedah 1: Anotasi @CrossOrigin
Kaedah 2: konfigurasi addCorsMappings
@Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS") .allowCredentials(true) .maxAge(3600) .allowedHeaders("*"); }
Kelemahan: Konfigurasi berkaitan merentas domain akan menjadi tidak sah apabila menggunakan pemintas tersuai selepas mengkonfigurasi menggunakan kaedah ini.
Sebabnya ialah perintah lulus permintaan Apabila permintaan datang, ia akan memasuki pemintas terlebih dahulu dan bukannya memasukkan pemetaan, jadi tiada maklumat rentas domain yang dikonfigurasikan dalam maklumat pengepala yang dikembalikan. Penyemak imbas akan melaporkan pengecualian merentas domain.
Kaedah 3: Gunakan penapis 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); }
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan antara muka panggilan latar belakang java dan mengendalikan isu merentas domain. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!