Heim >Java >javaLernprogramm >So lösen Sie die Java-Hintergrundaufrufschnittstelle und behandeln domänenübergreifende Probleme

So lösen Sie die Java-Hintergrundaufrufschnittstelle und behandeln domänenübergreifende Probleme

WBOY
WBOYnach vorne
2023-05-16 11:04:051268Durchsuche

Java-Aufrufschnittstelle und domänenübergreifende Handhabung

Beim Aufbau eines Systems muss der js-Code von System A manchmal die Schnittstelle von System B aufrufen, was zu domänenübergreifenden Phänomenen führt kann über den Hintergrundanruf erfolgen, um domänenübergreifende

-Probleme zu bearbeiten, ist ein bisschen wie „Agentur“.

Hier eine gängige Methode aufzeichnen

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

Domänenübergreifende Probleme durch Aufruf externer Schnittstellen

Hintergrund: Ein Bei unserem System handelt es sich um ein Vorschlagssystem, auf das von außen verwiesen wird. Nachdem ein Benutzer einen Kommentar oder eine Antwort erhalten hat, wird die Anzahl der ungelesenen Nachrichten in „Meine Nachrichten“ angezeigt.

Der erzielte Effekt: Wenn im Vorschlagssystem die Anzahl der ungelesenen Nachrichten größer als 0 ist, wird an der Stelle, an der unser System einführt, eine Aufforderung für ungelesene Nachrichten angezeigt das Vorschlagssystem.

Im Hintergrund des vorgeschlagenen Systems haben wir eine countBlog-Schnittstelle geschrieben, um die Anzahl der ungelesenen Nachrichten zu erhalten (JSON-Format)

Stellen Sie im Front-End unseres Systems vor die Schnittstelle Steuern Sie die rote Punktanzeige anhand der Anzahl der zurückgegebenen ungelesenen Nachrichten

Melden Sie domänenübergreifende Problemfehler nach der Ausführung:

Lösen Sie das Problem

#🎜🎜 #Methode 1: @CrossOrigin mit Anmerkungen versehen

Methode 2: CorsMappings-Konfiguration hinzufügen

@Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")  
                .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")
                .allowCredentials(true)
                .maxAge(3600)
                .allowedHeaders("*");  
    }

Nachteile: Verwenden Sie diese Methode zu Konfigurieren und dann verwenden. Domänenübergreifende Konfigurationen werden beim Anpassen von Interceptoren ungültig.

Der Grund ist die Reihenfolge der Anfragen. Wenn die Anfrage eingeht, wird sie zuerst in den Interceptor und nicht in die Mapping-Zuordnung eingegeben, sodass die zurückgegebenen Header-Informationen keine konfigurierten domänenübergreifenden Informationen enthalten. Der Browser meldet eine domänenübergreifende Ausnahme.

Methode 3: CorsFilter-Filter verwenden

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

Das obige ist der detaillierte Inhalt vonSo lösen Sie die Java-Hintergrundaufrufschnittstelle und behandeln domänenübergreifende Probleme. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen