最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot解決跨域請求攔截問題代碼實例

 更新時間:2019年06月21日 09:58:07   作者:冬眠的山谷  
這篇文章主要介紹了SpringBoot解決跨域請求攔截代碼實例,在微服務(wù)開發(fā)中,一個系統(tǒng)包含多個微服務(wù),會存在跨域請求的場景。 本文講解SpringBoot解決跨域請求攔截的問題。,需要的朋友可以參考下

前言

同源策略:判斷是否是同源的,主要看這三點,協(xié)議,ip,端口。

同源策略就是瀏覽器出于網(wǎng)站安全性的考慮,限制不同源之間的資源相互訪問的一種政策。

比如在域名https://www.baidu.com下,腳本不能夠訪問https://www.sina.com源下的資源,否則將會被瀏覽器攔截。

注意兩點:

1.必須是腳本請求,比如AJAX請求。

但是如下情況不會產(chǎn)生跨域攔截

<img src="xxx"/>
<a href='xxx"> </a>

2.跨域攔截是前端請求已經(jīng)發(fā)出,并且在后端返回響應(yīng)時檢查相關(guān)參數(shù),是否允許接收后端請求。

在微服務(wù)開發(fā)中,一個系統(tǒng)包含多個微服務(wù),會存在跨域請求的場景。

本文主要講解SpringBoot解決跨域請求攔截的問題。

搭建項目

這里創(chuàng)建兩個web項目,web1 和 web2.

web2項目請求web1項目的資源。

這里只貼關(guān)鍵代碼,完整代碼參考GitHub

WEB2

創(chuàng)建一個Controller返回html頁面

@Slf4j
@Controller
public class HomeController {
@RequestMapping("/index")
public String home(){
log.info("/index");
return "/home";
}
}

html頁面 home.html

這里創(chuàng)建了一個按鈕,按鈕按下則請求資源:http://localhost:8301/hello

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>web2</title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
</script>
<script>
$(function () {
$("#testBtn").click(function () {
console.log("testbtn ...");
$.get("http://localhost:8301/hello",function(data,status){
alert("數(shù)據(jù): " + data + "\n狀態(tài): " + status);
});
})
})
</script>
</head>
<body>
web2
<button id="testBtn">測試</button>
</body>
</html>

WEB1

@Slf4j
@RestController
public class Web1Controller {
@RequestMapping("/hello")
public String hello(){
log.info("hello ");
return "hello," + new Date().toString();
}
}

這里配置兩個項目為不同的端口。

WEB1為8301

WEB2為8302

因此是不同源的。

測試

在web1還沒有配置允許跨域訪問的情況下

按下按鈕,將會出現(xiàn)錯誤。顯示Header中沒有Access-Control-Allow-Origin

Access to XMLHttpRequest at 'http://localhost:8301/hello' from origin 'http://localhost:8300' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

WEB1添加允許跨域請求,通過實現(xiàn)WebMvcConfigurer

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/hello");
}
}

再次訪問將會返回正常數(shù)據(jù)。

除了以上的配置外,還可以做更細(xì)致的限制

比如對請求的headers,請求的方法POST/GET...。請求的源進(jìn)行限制。

同時還可以使用注解 @CrossOrigin來替換上面的配置。

@Slf4j
@RestController
public class Web1Controller {
@CrossOrigin
@RequestMapping("/hello")
public String hello(){
log.info("hello ");
return "hello," + new Date().toString();
}
}

注解可以用在類上,也可以用在方法上,但必須是控制器類

配置和上面一樣,也是可以對方法,header,源進(jìn)行個性化限制。

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CrossOrigin {
/** @deprecated */
@Deprecated
String[] DEFAULT_ORIGINS = new String[]{"*"};
/** @deprecated */
@Deprecated
String[] DEFAULT_ALLOWED_HEADERS = new String[]{"*"};
/** @deprecated */
@Deprecated
boolean DEFAULT_ALLOW_CREDENTIALS = false;
/** @deprecated */
@Deprecated
long DEFAULT_MAX_AGE = 1800L;
@AliasFor("origins")
String[] value() default {};
@AliasFor("value")
String[] origins() default {};
String[] allowedHeaders() default {};
String[] exposedHeaders() default {};
RequestMethod[] methods() default {};
String allowCredentials() default "";
long maxAge() default -1L;
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringSecurity數(shù)據(jù)庫進(jìn)行認(rèn)證和授權(quán)的使用

    SpringSecurity數(shù)據(jù)庫進(jìn)行認(rèn)證和授權(quán)的使用

    本文主要介紹了用戶的賬號、密碼以及角色信息在數(shù)據(jù)庫中的認(rèn)證和授權(quán),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • java?zip文件解壓后無法刪除原zip文件問題

    java?zip文件解壓后無法刪除原zip文件問題

    這篇文章主要介紹了java?zip文件解壓后無法刪除原zip文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 詳解Java虛擬機(jī)30個常用知識點之1——類文件結(jié)構(gòu)

    詳解Java虛擬機(jī)30個常用知識點之1——類文件結(jié)構(gòu)

    這篇文章主要介紹了Java虛擬機(jī)類文件結(jié)構(gòu),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • java關(guān)鍵字final用法知識點

    java關(guān)鍵字final用法知識點

    在本篇文章里小編給大家分享的是關(guān)于java關(guān)鍵字final用法知識點以及相關(guān)實例內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2019-09-09
  • MyBatis關(guān)于二級緩存問題

    MyBatis關(guān)于二級緩存問題

    本篇文章主要介紹了MyBatis關(guān)于二級緩存問題,二級緩存是Mapper級別的緩存,多個sqlSession操作同一個Mapper,其二級緩存是可以共享的。
    2017-03-03
  • Jenkins?Pipline實現(xiàn)及原理示例解析

    Jenkins?Pipline實現(xiàn)及原理示例解析

    這篇文章主要為大家介紹了Jenkins?Pipline實現(xiàn)及原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • 如何使用Reactor完成類似Flink的操作

    如何使用Reactor完成類似Flink的操作

    這篇文章主要介紹了如何使用Reactor完成類似Flink的操作,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-03-03
  • 深入理解Java設(shè)計模式之代理模式

    深入理解Java設(shè)計模式之代理模式

    這篇文章主要介紹了Java設(shè)計模式之代理模式的的相關(guān)資料,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2021-11-11
  • java面試try-with-resources問題解答

    java面試try-with-resources問題解答

    這篇文章主要介紹了java面試try-with-resources問題解答,?這個語句的作用是,確保該語句執(zhí)行之后,關(guān)閉每一個資源,也就是說它確保了每個資源都在生命周期結(jié)束之后被關(guān)閉
    2022-07-07
  • IDEA配置靜態(tài)資源熱加載操作(Springboot修改靜態(tài)資源不重啟)

    IDEA配置靜態(tài)資源熱加載操作(Springboot修改靜態(tài)資源不重啟)

    這篇文章主要介紹了IDEA配置靜態(tài)資源熱加載操作(Springboot修改靜態(tài)資源不重啟),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10

最新評論

怀来县| 玛沁县| 沙洋县| 金塔县| 抚顺市| 乐平市| 益阳市| 宁明县| 凤冈县| 凤庆县| 敦煌市| 普定县| 郸城县| 慈利县| 漳平市| 宜城市| 锡林郭勒盟| 嘉定区| 车险| 六枝特区| 安仁县| 靖边县| 广水市| 河津市| 盐源县| 河南省| 洮南市| 南郑县| 诸城市| 格尔木市| 潜江市| 读书| 高安市| 永登县| 江都市| 武鸣县| 永宁县| 乌海市| 高青县| 远安县| 新丰县|