Heim > Java > javaLernprogramm > Hauptteil

Auf welche Weise löst Springboot domänenübergreifende Probleme?

WBOY
Freigeben: 2023-05-22 15:49:25
nach vorne
781 Leute haben es durchsucht

Was ist Cross-Domain

Cross-Domain: bezieht sich auf die Tatsache, dass der Browser keine Skripte von anderen Websites ausführen kann. Dies wird durch die Same-Origin-Richtlinie des Browsers verursacht, bei der es sich um eine Sicherheitsbeschränkung handelt, die der Browser für JavaScript auferlegt.
Zum Beispiel: Seite a möchte die Ressourcen von Seite B erhalten. Wenn die Protokolle, Domänennamen, Ports und Subdomänennamen der Seiten a und b unterschiedlich sind, sind die durchgeführten Zugriffsaktionen alle domänenübergreifend. und der Browser
Aus Sicherheitsgründen ist der domänenübergreifende Zugriff generell eingeschränkt, das heißt, domänenübergreifende Ressourcenanfragen sind nicht erlaubt. Hinweis: Bei domänenübergreifenden Zugriffsbeschränkungen handelt es sich eigentlich um Browserbeschränkungen. Es ist wichtig, diese

Same-Origin-Richtlinie zu verstehen: Das bedeutet, dass das Protokoll, der Domänenname und der Port gleich sein müssen und jeder Unterschied zwischen ihnen zu domänenübergreifenden

führt;

springboot Mehrere Möglichkeiten zur Lösung domänenübergreifender Probleme

Methode 1, SpringBoot-Annotation @CrossOrigin

Fügen Sie die @CrossOrigin-Annotation direkt zur Controller-Methode oder -Klasse SpringMVC hinzu Verwendet @CrossOrigin-Nutzungsszenarioanforderungen jdk1.8+ Spring4.2+

@GetMapping("/hello")
@CrossOrigin
public String hello() {
        return "hello:" + simpleDateFormat.format(new Date());
}
Nach dem Login kopieren

Methode 2: CorsFilter verwenden

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@Configuration
public class ConfigConfiguration {
    @Bean
    public CorsFilter CorsFilter() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOriginPattern("*");
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        corsConfiguration.setAllowCredentials(true);
        UrlBasedCorsConfigurationSource ub = new UrlBasedCorsConfigurationSource();
        ub.registerCorsConfiguration("/**", corsConfiguration);
        return new CorsFilter(ub);
    }
}
Nach dem Login kopieren

Methode 3: Benutzerdefinierte Filtermethode (Webfilter)#🎜🎜 #
@Component
public class CustomFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletResponse res = (HttpServletResponse) servletResponse;
        // 设置允许Cookie
        res.addHeader("Access-Control-Allow-Credentials", "true");
        // 允许http://www.xxx.com域(自行设置,这里只做示例)发起跨域请求
        res.addHeader("Access-Control-Allow-Origin", "*");
        // 设置允许跨域请求的方法
        res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
        // 允许跨域请求包含content-type
        res.addHeader("Access-Control-Allow-Headers", "Content-Type,X-CAF-Authorization-Token,sessionToken,X-TOKEN");
        if (((HttpServletRequest) servletRequest).getMethod().equals("OPTIONS")) {
            servletResponse.getWriter().println("ok");
            return;
        }
        filterChain.doFilter(servletRequest, servletResponse);
    }
}
Nach dem Login kopieren
#🎜 🎜# Methode 4: Implementieren Sie die addCorsMappings-Methode in WebMvcConfigurer

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Component
public class MyWebMvcConfigurer implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")  // 匹配所有的路径
                .allowCredentials(true) // 设置允许凭证
                .allowedHeaders("*")   // 设置请求头
                .allowedMethods("GET", "POST", "PUT", "DELETE") // 设置允许的方式
                .allowedOriginPatterns("*");
    }
}
Nach dem Login kopieren

Methode 5: Verwenden Sie Nginx als dynamischen Proxy

Das obige ist der detaillierte Inhalt vonAuf welche Weise löst Springboot domänenübergreifende Probleme?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.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