> Java > java지도 시간 > 본문

Java 백그라운드 호출 인터페이스를 해결하고 도메인 간 문제를 처리하는 방법

WBOY
풀어 주다: 2023-05-16 11:04:05
앞으로
1230명이 탐색했습니다.

java 호출 인터페이스 및 교차 도메인 처리

시스템을 구축할 때 시스템 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿