Maison  >  Article  >  Java  >  De quelles manières Springboot résout les problèmes inter-domaines ?

De quelles manières Springboot résout les problèmes inter-domaines ?

WBOY
WBOYavant
2023-05-22 15:49:25777parcourir

Qu'est-ce que le cross-domain ?

Cross-domain : cela signifie que le navigateur ne peut pas exécuter de scripts provenant d'autres sites Web. Cela est dû à la politique de même origine du navigateur, qui est une restriction de sécurité imposée par le navigateur sur JavaScript.
Par exemple : la page a souhaite obtenir les ressources de la page B. Si les protocoles, noms de domaine, ports et noms de sous-domaines des pages a et b sont différents, les actions d'accès effectuées sont toutes cross-domaines, et le navigateur
pour Les problèmes de sécurité restreignent généralement l'accès entre domaines, c'est-à-dire que les demandes de ressources entre domaines ne sont pas autorisées. Remarque : les restrictions d'accès entre domaines sont en fait des restrictions de navigateur. Il est très important de comprendre ceci

Politique de même origine : cela signifie que le protocole, le nom de domaine et le port doivent être les mêmes, et toute différence entre eux entraînera un inter-domaine ;

Plusieurs façons pour Springboot de résoudre les problèmes croisés. domain

Méthode 1. Annotation de SpringBoot @CrossOrigin

Ajoutez l'annotation @CrossOrigin directement à la méthode ou à la classe Controller Le scénario d'utilisation de SpringMVC utilisant @CrossOrigin nécessite jdk1.8+ Spring4.2+

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

Méthode 2 : utiliser CorsFilter.

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

Méthode 3 : Personnaliser la méthode de filtrage (filtre Web)

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

Méthode 4 : Implémenter la méthode addCorsMappings dans 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("*");
    }
}

Méthode 5 : Utiliser nginx comme proxy dynamique

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer