教你用Java SpringBoot如何解決跨域
跨域
什麼是跨域
請求url的協議,域名,端口三者之間任意一個與當前頁面url不同的即為跨域。
CORS
CORS(Cross-origin resource sharing-跨源資源共享)允許網頁從其他域向瀏覽器請求額外的資源
SpringBoot解決跨域方案
1.使用@CrossOrigin註解
該註解添加在你想要讓某接口允許跨域的的,類上面,或者實現方法上面。
該註解包含的屬性:orgins,allowdHeaders,methods,exposedHeaders,allowCreden,maxAge。
2.Spring框架全局配置CORS配置
2.1Spring MVC CORS 使用WebMvcConfigurerAdapter配置!
2.2Spring Boot CORS 使用WebMvcConfigurer配置!
2.3CORS 使用Spring Security配置!
具體實現
1.使用@CrossOrigin註解
1.1目錄結構
DemoApplication.java
package com.example.crossdomain.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
CorsTestController.java
package com.example.crossdomain.demo.controller; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RequestMapping("/demo") @RestController @CrossOrigin("https://blog.csdn.net") // 隻有指定域名可以訪問該類下所有接口 public class CorsTestController { @GetMapping("/sayHello") public String sayHello(){ return "Hello world"; } }
1.2運行結果
2.使用@CrossOrigin註解
2.1Spring MVC CORS 使用WebMvcConfigurerAdapter配置!
2.1.1目錄結構
2.2.2添加CorsConfiguration.java
package com.example.crossdomain.demo.config; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; @Configuration @EnableWebMvc public class CorsConfiguration extends WebMvcConfigurerAdapter { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedMethods("GET", "POST"); } }
2.2.3運行結果
2.3Spring Boot CORS 使用WebMvcConfigurer配置
package com.example.crossdomain.demo.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.*; @Configuration public class CorsConfiguration { @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurerAdapter() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**"); } }; } }
2.4CORS 使用Spring Security配置
2.4.1目錄結構
2.4.2添加WebSecurityConfig.java
package com.example.crossdomain.demo.config; import org.springframework.context.annotation.Bean; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import java.util.Arrays; @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.cors(); } @Bean CorsConfigurationSource corsConfigurationSource() { CorsConfiguration corsConfiguration = new CorsConfiguration(); corsConfiguration.addAllowedOrigin("*"); //同源配置,*表示任何請求都視為同源,若需指定ip和端口可以改為如“localhost:8080”,多個以“,”分隔; corsConfiguration.addAllowedHeader("*");//header,允許哪些header,本案中使用的是token,此處可將*替換為token; corsConfiguration.addAllowedMethod("*"); //允許的請求方法,PSOT、GET等 UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", corsConfiguration); return source; } }
2.4.3運行結果
代碼獲取
碼雲
參考鏈接
什麼是跨域?跨域解決方法
Spring boot 入門之CORS 跨域配置詳解
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!
推薦閱讀:
- 關於springboot2.4跨域配置問題
- 最新springboot解決跨域的幾種方式小結
- SpringBoot+Spring Security無法實現跨域的解決方案
- springboot 設置CorsFilter跨域不生效的解決
- Spring Boot訪問靜態資源css/js,你真的懂瞭嗎