Rumah  >  Artikel  >  Java  >  Bagaimana untuk menyelesaikan antara muka panggilan latar belakang java dan mengendalikan isu merentas domain

Bagaimana untuk menyelesaikan antara muka panggilan latar belakang java dan mengendalikan isu merentas domain

WBOY
WBOYke hadapan
2023-05-16 11:04:051236semak imbas

Antara muka panggilan Java dan pemprosesan merentas domain

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".

Rakam kaedah biasa di sini

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();
}

Isu merentas domain yang disebabkan oleh panggilan antara muka luaran

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:

Selesaikan masalah

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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam