Heim  >  Artikel  >  Java  >  Auf welche Weise löst Springboot domänenübergreifende Probleme?

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

WBOY
WBOYnach vorne
2023-05-22 15:49:25707Durchsuche

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());
}

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);
    }
}

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);
    }
}
#🎜 🎜# 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("*");
    }
}

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen