Heim > Java > javaLernprogramm > Einführung in domänenübergreifendes SpringBoot (Codebeispiel)

Einführung in domänenübergreifendes SpringBoot (Codebeispiel)

不言
Freigeben: 2019-02-22 13:12:16
nach vorne
3345 Leute haben es durchsucht

Dieser Artikel bietet Ihnen eine Einführung in das domänenübergreifende SpringBoot (Codebeispiele). Freunde in Not können darauf verweisen.

Vorwort: Aus irgendeinem Grund verarbeitet das SpringBoot-Projekt des Unternehmens häufig einige domänenübergreifende Anforderungen.

Eins. In der Vergangenheit habe ich wie folgt eine Klasse geschrieben, die die domänenübergreifende Verarbeitung durch Abfrage relevanter Informationen abwickelt.

1.1 Definieren Sie zunächst einen Filter (Abfangen aller Anfragen, einschließlich domänenübergreifender Anfragen)

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);
    }
}
Nach dem Login kopieren

1.2 Registrieren Sie eine Konfigurationsklasse (Konfiguration) , put Die oben definierte Filterklasse wird im Kontext

@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;
    }
}
Nach dem Login kopieren

registriert. Hinweis: Diese Konfigurationsklasse löst hauptsächlich das Problem des Abfangens dieser Anforderungen durch den Filter (CrossDomainFilter). Wir haben

2. SpringBoots eigene Lösung für den domänenübergreifenden Filter (CorsFilter) geschrieben. Sie können die doFilterInternal()-Methode der Klasse direkt anzeigen Wird in der doFilter()-Methode aufgerufen (es kann verstanden werden, dass es sich um die doFilter()-Methode von Filter handelt).

Der Verarbeitungsprozess akzeptiert auch die OPTION-Methode und antwortet mit 200 und gibt zurück.

@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);
    }
}
Nach dem Login kopieren

3: Persönliche Zusammenfassung domänenübergreifender Probleme

Der Browser erkennt domänenübergreifende Probleme zunächst vor dem Senden einer Anfrage und vor dem Senden Bei einer domänenübergreifenden Anfrage wird eine Anfrage vom Typ OPTIONS gesendet (die Anfrageadresse bleibt unverändert und der Anfrageheader enthält einige andere Informationen. Die Anfrage muss vom Server beantwortet werden (bitte überprüfen Sie CrossDomainFilter). Wenn Sie eine Antwort erhalten, sendet der Browser nicht die eigentliche Anfrage.

3.1: Vom Browser gesendete OPTION-Anfrage (vorläufige Anfrage)

Hinweis: Im Bild haben wir festgestellt, dass die Anfrageadresse unverändert bleibt () ist die Anforderungsmethode OPTION und der Anforderungsheader enthält einige Informationen. Diese Informationen können darauf hinweisen, dass ich eine domänenübergreifende Anforderung stelle und die Anforderungsmethode POST ist. .

3.2: Der Server muss auf die Anfrage antworten (bitte überprüfen Sie CrossDomainFilter)

1) Legen Sie zunächst den entsprechenden Header fest (teilen Sie dem Browser einige Informationen zu den von mir unterstützten domänenübergreifenden Anfragen mit)

2) Setzen Sie den entsprechenden Status auf 200 und geben Sie Daten (beliebige Daten) zurück

3.3: Der Browser hat die Antwort auf die OPTION-Anfrage erhalten (der Server akzeptiert domänenübergreifend), also Sie können die echte Anfrage gerne wie folgt senden

1) Vergleichen Sie die OPTION-Anfrage, die Anfrageadresse hat sich nicht geändert^_^

2 ) Vergleichen Sie die Anforderungsmethode, die Anforderung ist POST Und die POST-Anforderung befindet sich in OPTIN Dem Server wurde mitgeteilt (Access-Control-Request-Method).

3) Vergleicht man den Header der OPTION-Anfrage, weist diese Anfrage keine Access-Control-Allow-****-bezogenen Parameter auf.

Das obige ist der detaillierte Inhalt vonEinführung in domänenübergreifendes SpringBoot (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:cnblogs.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage