Rumah > Java > javaTutorial > 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
Lepaskan: 2023-05-16 11:04:05
ke hadapan
1263 orang telah melayarinya

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();
}
Salin selepas log masuk

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("*");  
    }
Salin selepas log masuk

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);
}
Salin selepas log masuk

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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan