これは、ブラウザーの同一生成元ポリシーの制限が原因です。同一生成元ポリシー (同一生成元ポリシー) は規約です。これはブラウザの中核で最も基本的なセキュリティ機能です。同一生成元ポリシーが存在しない場合、ブラウザの通常の機能に影響が出る可能性があります。 Web は同一生成元ポリシーに基づいて構築されており、ブラウザは同一生成元ポリシーを実装する手段にすぎません。
JavaScript では、同一生成元ポリシーにより、異なるドメイン間のやり取りが制限され、クロスドメイン攻撃が防止されます。いわゆる同じオリジン (つまり、同じドメイン内) とは、2 つのページが同じプロトコル、ホスト、ポート
#1. 新しい CorsFilter (グローバル クロスドメイン) を返す
@Configuration public class GlobalCorsConfig { @Bean public CorsFilter corsFilter() { //1. 添加 CORS配置信息 CorsConfiguration config = new CorsConfiguration(); //放行哪些原始域 config.addAllowedOrigin("*"); //是否发送 Cookie config.setAllowCredentials(true); //放行哪些请求方式 config.addAllowedMethod("*"); //放行哪些原始请求头部信息 config.addAllowedHeader("*"); //暴露哪些头部信息 config.addExposedHeader("*"); //2. 添加映射路径 UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource(); corsConfigurationSource.registerCorsConfiguration("/**",config); //3. 返回新的CorsFilter return new CorsFilter(corsConfigurationSource); } }
@Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") //是否发送Cookie .allowCredentials(true) //放行哪些原始域 .allowedOrigins("*") .allowedMethods(new String[]{"GET", "POST", "PUT", "DELETE"}) .allowedHeaders("*") .exposedHeaders("*"); } }
3. アノテーションを使用する (ローカル クロスドメイン)
@RestController @CrossOrigin(origins = "*") public class HelloController { @RequestMapping("/hello") public String hello() { return "hello world"; } }
@RequestMapping("/hello") @CrossOrigin(origins = "*") //@CrossOrigin(value = "http://localhost:8081") //指定具体ip允许跨域 public String hello() { return "hello world"; }
4. 応答ヘッダーを手動で設定します (ローカル クロスドメイン)
HttpServletResponse オブジェクトを使用して応答を追加しますヘッダー (Access-Control-Allow-Origin) を使用して、元のドメインを承認します。ここでの Origin の値は、すべてのアクセス許可が許可されていることを示す「*」に設定することもできます。
@RequestMapping("/index") public String index(HttpServletResponse response) { response.addHeader("Access-Allow-Control-Origin","*"); return "index"; }
まず、MyCorsFilter.javaという名前のフィルターを作成します
package com.mesnac.aop; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Component; @Component public class MyCorsFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type"); chain.doFilter(req, res); } public void init(FilterConfig filterConfig) {} public void destroy() {} }
<!-- 跨域访问 START--> <filter> <filter-name>CorsFilter</filter-name> <filter-class>com.mesnac.aop.MyCorsFilter</filter-class> </filter> <filter-mapping> <filter-name>CorsFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 跨域访问 END -->
以上がSpring Boot がクロスドメイン実装を実装する方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。