Cet article vous présente une introduction au cross-domain SpringBoot (exemples de code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Avant-propos : Pour une raison quelconque, le projet SpringBoot de l'entreprise gère souvent certaines requêtes inter-domaines.
Un. Dans le passé, j'ai écrit un cours pour gérer le traitement inter-domaines en consultant les informations pertinentes, comme suit.
1.1 Définissez d'abord un filtre (interception de toutes les requêtes, y compris les requêtes inter-domaines)
public class CrossDomainFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest hreq = (HttpServletRequest) request; // HttpServletResponse hresp = (HttpServletResponse) response; //跨域 hresp.setHeader("Access-Control-Allow-Origin", "*"); //设置相应头 //跨域 Header hresp.setHeader("Access-Control-Allow-Methods", "*"); hresp.setHeader("Access-Control-Allow-Headers", "Content-Type,XFILENAME,XFILECATEGORY,XFILESIZE,x-requested-with,requesttype"); //header('Access-Control-Allow-Headers:x-requested-with,content-type,requesttype'); // 浏览器是会先发一次options请求,如果请求通过,则继续发送正式的post请求 // 配置options的请求返回 if (hreq.getMethod().equals("OPTIONS")) { //如果发现该请求为OPTION,则直接返回(不需要进入系统),并且设置相应信息 hresp.setStatus(200); // hresp.setContentLength(0); hresp.getWriter().write("OPTIONS returns OK"); return; } // Filter 只是链式处理,请求依然转发到目的地址。 chain.doFilter(request, response); } }
1.2 Enregistrez une classe de configuration ( Configuration), enregistrez la classe de filtre définie ci-dessus dans l'environnement contextuel
@Configuration public class WebConfiguration { @Bean public RemoteIpFilter remoteIpFilter() { return new RemoteIpFilter(); } @Bean public FilterRegistrationBean<CrossDomainFilter> testFilterRegistration() { FilterRegistrationBean<CrossDomainFilter> registration = new FilterRegistrationBean<CrossDomainFilter>(); registration.setFilter(new CrossDomainFilter()); registration.addUrlPatterns("/*"); registration.addInitParameter("paramName", "paramValue"); registration.setName("MyFilter"); registration.setOrder(1); return registration; } }
Remarque : Cette classe de configuration résout principalement le problème de l'interception de ces requêtes par le filtre nous avons écrit (CrossDomainFilter)
2. La propre solution de SpringBoot pour le filtre inter-domaines (CorsFilter) Le code source de ce filtre est très simple. Vous pouvez visualiser directement la méthode doFilterInternal() de la classe, car cela. La méthode sera appelée dans la méthode doFilter() (on peut comprendre qu'il s'agit de la méthode doFilter() de Filter).
Le processus de traitement accepte également la méthode OPTION et répond par 200 et renvoie.
@Configuration @EnableAutoConfiguration public class CrossOriginconfig { @Bean public CorsFilter corsFilter() { final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource(); final CorsConfiguration corsConfiguration = new CorsConfiguration(); corsConfiguration.setAllowCredentials(true); // 设置你要允许的网站域名,如果全允许则设为 * corsConfiguration.addAllowedOrigin("*"); // 如果要限制 HEADER 或 METHOD 请自行更改 corsConfiguration.addAllowedHeader("*"); corsConfiguration.addAllowedMethod("*"); urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration); System.out.println("confi init"); return new CorsFilter(urlBasedCorsConfigurationSource); } }
3 : Résumé personnel des problèmes inter-domaines
Le navigateur détecte d'abord les problèmes inter-domaines avant d'envoyer une requête, et avant d'envoyer une requête inter-domaine, une requête de type OPTIONS est envoyée (l'adresse de la requête reste inchangée et l'en-tête de la requête contient d'autres informations. La requête doit recevoir une réponse du serveur (veuillez vérifier CrossDomainFilter si la requête). ne le fait pas. Si une réponse est reçue, le navigateur n'enverra pas la véritable demande.
3.1 : Demande d'OPTION envoyée par le navigateur (demande provisoire)
Remarque : Sur l'image, nous avons constaté que l'adresse de la demande reste inchangée () , la méthode de requête est OPTION et l'en-tête de la requête contient des informations. Ces informations peuvent indiquer que je fais une requête inter-domaines et la méthode de requête est POST. .
3.2 : Le serveur doit répondre à la demande (veuillez vérifier CrossDomainFilter)
1) Définissez d'abord l'en-tête correspondant (indiquez au navigateur quelques informations sur les requêtes inter-domaines que je prends en charge)
2) Définir le statut correspondant à 200, et renvoyer des données (données arbitraires)
3.3 : Le navigateur a reçu la réponse à la requête OPTION (le serveur accepte le cross-domain), donc n'hésitez pas à envoyer la vraie demande comme suit
1) Comparez la demande OPTION, l'adresse de la demande n'a pas changé ^_^
2 ) Comparez la méthode de requête, la requête est POST et la requête POST est dans OPTIN Le serveur a été informé (Access-Control-Request-Method).
3) En comparant l'en-tête de la requête OPTION, cette requête n'a pas de paramètres liés à Access-Control-Allow-****.
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!

L'article discute de l'utilisation de Maven et Gradle pour la gestion de projet Java, la construction de l'automatisation et la résolution de dépendance, en comparant leurs approches et leurs stratégies d'optimisation.

L'article discute de la création et de l'utilisation de bibliothèques Java personnalisées (fichiers JAR) avec un versioning approprié et une gestion des dépendances, à l'aide d'outils comme Maven et Gradle.

L'article examine la mise en œuvre de la mise en cache à plusieurs niveaux en Java à l'aide de la caféine et du cache de goyave pour améliorer les performances de l'application. Il couvre les avantages de configuration, d'intégration et de performance, ainsi que la gestion de la politique de configuration et d'expulsion le meilleur PRA

L'article discute de l'utilisation de JPA pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux. Il couvre la configuration, la cartographie des entités et les meilleures pratiques pour optimiser les performances tout en mettant en évidence les pièges potentiels. [159 caractères]

Le chargement de classe de Java implique le chargement, la liaison et l'initialisation des classes à l'aide d'un système hiérarchique avec Bootstrap, Extension et Application Classloaders. Le modèle de délégation parent garantit que les classes de base sont chargées en premier, affectant la classe de classe personnalisée LOA


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Version Mac de WebStorm
Outils de développement JavaScript utiles

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

Version crackée d'EditPlus en chinois
Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

VSCode Windows 64 bits Télécharger
Un éditeur IDE gratuit et puissant lancé par Microsoft