Por motivos de segurança, os navegadores modernos devem obedecer à política de mesma origem ao fazer solicitações HTTP. Caso contrário, são solicitações HTTP entre domínios, que são proibidas por padrão. O IP (nome de domínio) é diferente, ou a porta é diferente, e o protocolo for diferente (como HTTP, HTTPS) causará problemas entre domínios.
As soluções front-end gerais são:
① Use JSONP para oferecer suporte a solicitações entre domínios. O princípio do JSONP para obter solicitações entre domínios é simplesmente criação dinâmica
② Use o mecanismo de proxy de reação para resolver problemas entre domínios. Quando o front-end solicita, a solicitação é enviada primeiro para o back-end do mesmo endereço de origem e a solicitação de back-end é encaminhada para evitar o acesso entre domínios .
Posteriormente, o HTML5 suportou o protocolo CORS. CORS é um padrão W3C, o nome completo é "Compartilhamento de recursos de origem cruzada" (Compartilhamento de recurso de origem cruzada), permitindo que os navegadores enviem solicitações XMLHttpRequest para servidores de origem cruzada, superando assim a restrição de que AJAX só pode ser usado a partir do mesmo fonte. Ele adiciona um cabeçalho especial [Access-Control-Allow-Origin] ao servidor para informar ao cliente sobre as restrições de domínio cruzado. Se o navegador suportar CORS e determinar que a origem foi passada, ele permitirá que XMLHttpRequest inicie solicitações de domínio cruzado .
O front-end usa o protocolo CORS, e o back-end é necessário para oferecer suporte a solicitações que não são da mesma origem. Existem duas maneiras de configurar o suporte para solicitações que não são da mesma origem no Spring Boot.
Primeiro, configure CorsFilter.
@Configuration
public class GlobalCorsConfig {
@Bean
public CorsFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
config.addAllowedOrigin("*");
config.setAllowCredentials(true);
config.addAllowedMethod("*");
config.addAllowedHeader("*");
config.addExposedHeader("*");
UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
configSource.registerCorsConfiguration("/**", config);
return new CorsFilter(configSource);
}
}
É necessário configurar o trecho de código acima. A segunda maneira é um pouco mais simples.
Em segundo lugar, adicione à classe de inicialização:
public class Application extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowCredentials(true)
.allowedHeaders("*")
.allowedOrigins("*")
.allowedMethods("*");
}
}