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