Maison >Java >javaDidacticiel >Comment résoudre l'interface d'appel en arrière-plan Java et gérer les problèmes inter-domaines
Lors de la construction d'un système, parfois le code js du système A doit appeler l'interface du système B, ce qui provoquera des phénomènes inter-domaines
pouvant être gérés via. appels en arrière-plan. Cela signifie en quelque sorte « agence ».
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(); }
Contexte :Sur notre système, un système de suggestion est référencé de l'extérieur dans le système de suggestion, après que l'utilisateur a reçu un commentaire. ou répondez , le nombre de messages non lus s'affiche dans Mes messages.
Effets obtenus : Lorsque le nombre de messages non lus dans le système de suggestion est supérieur à 0, un point rouge indiquant la présence de messages non lus apparaîtra à l'endroit où notre système introduit le système de suggestion.
Dans le backend du système proposé, nous avons écrit une interface countBlog pour obtenir le nombre de messages non lus (format json)
Dans le frontend de notre système, nous avons introduit une interface pour contrôler l'affichage du point rouge en renvoyant le nombre de messages non lus
Bogue de problème inter-domaines signalé après l'exécution :
Méthode 1 : Annoter @CrossOrigin
Méthode 2 : configuration addCorsMappings
@Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS") .allowCredentials(true) .maxAge(3600) .allowedHeaders("*"); }
Inconvénients : Utilisez cette méthode pour configurer, puis utiliser un intercepteur personnalisé À ce stade, les configurations liées à plusieurs domaines deviendront invalides.
La raison est l'ordre des requêtes. Lorsque la requête arrive, elle entrera d'abord dans l'intercepteur au lieu d'entrer dans le mappage, il n'y a donc aucune information inter-domaine configurée dans les informations d'en-tête renvoyées. Le navigateur signalera une exception inter-domaines.
Méthode 3 : Utiliser le filtre 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); }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!