精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

SpringBoot 解決跨域請求的幾種姿勢!

開發 前端
在 Spring Boot 服務中可以通過過濾器或者配置類實現全局跨域訪問,也可以通過@CrossOrigin注解實現局部跨域訪問。

01、背景介紹

熟悉 web 系統開發的同學,對下面這樣的錯誤應該不會太陌生。

圖片圖片

之所以會出現這個錯誤,是因為瀏覽器出于安全的考慮,采用同源策略的控制,防止當前站點惡意攻擊 web 服務器盜取數據。

同源策略,簡單的說就是當瀏覽器訪問 web 服務器資源時,只有源相同才能正常進行通信,即協議、域名、端口號都完全一致,否則就屬于跨域請求。當發起跨域請求時,服務端是能收到請求并正常返回結果的,只是結果被瀏覽器攔截了。

像上文中,瀏覽器訪問的站點是http://127.0.0.1:8848/,而站點內發起的接口請求源是http://localhost:8080,因為不同源,所以報跨域請求異常。

由此可見,想要實現接口請求的正常訪問,瀏覽器的訪問站點源和接口請求源,必須得一致。

事實上,在現在流行的前后端分離的開發模式下,很難做到請求源高度一致,那怎么辦呢?

答案肯定是有辦法啦!

雖然瀏覽器出于安全的考慮,默認采用同源策略控制,以便減少服務器被惡意攻擊的機會,但是開發者可以通過CORS協議在瀏覽器內實現站內跨域請求訪問。

實現很簡單,通過在 web 服務器中增加一個特殊的Header響應屬性來告訴瀏覽器解除跨域的限制,如果瀏覽器支持CORS并且判斷允許通過的話,此時發起的跨域請求就可以正常展示了。

常用的 Header 響應屬性如下:

圖片圖片

帶著以上的信息,我們就一起來了解一下如何在 Spring Boot 應用中實現跨域訪問。

02、解決方案

2.1、方法一:采用過濾器的方式全局配置

采用過濾器的方式來實現所有接口支持跨域請求,是一種比較通用的做法,也是 Java web 項目中常用的方法,實現過程如下!

首先,創建一個實現自Filter接口的過濾器,示例如下:

public class CrossFilter implements Filter {

    /**
     * 允許跨域的白名單域名
     */
    private final static Set<String> ALLOW_DOMAINS = new HashSet<>();

    static {
        ALLOW_DOMAINS.add("http://127.0.0.1:8848");
    }


    @Override
    public void init(FilterConfig config) throws ServletException {}

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        HttpServletResponse response = (HttpServletResponse)servletResponse;
        // 獲取客戶端原始請求域
        String origin = request.getHeader("Origin");
        String originDomain = removeHttp(origin);
        if(ALLOW_DOMAINS.contains(originDomain)){
            // 在響應對象中,添加CROS協議相關的header屬性
            response.setHeader("Access-Control-Allow-Origin", origin);
            response.setHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS,DELETE,HEAD,PUT,PATCH");
            response.setHeader("Access-Control-Max-Age", "3600");
            response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,Authorization,authorization");
            response.setHeader("Access-Control-Allow-Credentials","true");
        }
        //繼續往下傳遞
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {}


    /**
     * 移除http協議頭部
     * @param url
     * @return
     */
    public static String removeHttp(String url){
        return url.replace("http://", "").replace("https://", "");
    }

}

接著,將其注冊到Servlet容器中,示例如下:

@Configuration
public class FilterConfig {

    /**
     * 添加CrossFilter過濾器
     * @return
     */
    @Bean
    public FilterRegistrationBean crossFilterBean() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setName("crossFilter"); // 指定過濾器名稱
        registration.setFilter(new CrossFilter()); // 指定過濾器實現類
        registration.setUrlPatterns(Collections.singleton("/*"));// 指定攔截路徑
        registration.setOrder(1);// 指定順序
        return registration;
    }
}

最后,啟動服務后,再到瀏覽器中發起跨域請求,看看效果如下。

圖片圖片

圖片圖片

從結果上看,瀏覽器成功進行了跨域請求,并展示了服務器返回的結果。

2.2、方法二:通過全局配置類實現跨域訪問

在 Spring Boot 應用,除了采用過濾器的方式實現跨域訪問外,我們還可以通過全局配置類實現跨域訪問。

實現方法也非常簡單,只需要重寫WebMvcConfigurer接口中的addCorsMappings方法即可,示例如下:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET", "POST", "PUT", "DELETE")
                .maxAge(3600)
                .allowedHeaders("Origin", "Accept", "Content-Type", "Authorization")
                .allowCredentials(true);
    }
}

其中allowedOrigins("*")表示對所有請求都允許跨域訪問。

2.3、方法三:通過CrossOrigin注解實現跨域訪問

某些場景,如果不希望所有的接口都能跨域訪問,只想在部分接口上放開跨域訪問。此時,可以通過 Spring Boot 提供的@CrossOrigin注解,在對應的方法上加上該注解,即可實現跨域訪問。

示例如下:

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @CrossOrigin
    @PostMapping(value = "/queryAll")
    public List<User> queryAll(){
        List<User> result = userService.queryAll();
        return result;
    }
}

如果使用在controller類上,表示當前類下的所有接口方法都允許跨域訪問。

同時,@CrossOrigin注解也支持設置更小的粒度,示例如下:

@CrossOrigin(origins = "http://domain.com", maxAge = 1800)

更多的屬性行為,內容如下:

  • origins: 允許的源列表,多個源可以使用逗號分隔
  • methods: 允許的 HTTP 方法列表
  • allowedHeaders: 允許的請求頭列表,默認情況下,允許所有請求頭
  • allowCredentials:設置是否允許攜帶憑證
  • maxAge: 預檢請求的緩存時間(以秒為單位)

03、小結

最后總結一下,在 Spring Boot 服務中可以通過過濾器或者配置類實現全局跨域訪問,也可以通過@CrossOrigin注解實現局部跨域訪問。

跨域訪問的配置,更適合在開發環境中方便前后端進行聯調對接。為了安全起見,在上生產的時候,建議將其關閉掉或者做限制。

示例代碼地址:

https://gitee.com/pzblogs/spring-boot-example-demo

04、參考

1.https://cloud.tencent.com/developer/article/1655583

2.https://cloud.tencent.com/developer/article/1924258

責任編輯:武曉燕 來源: 潘志的研發筆記
相關推薦

2023-05-06 15:32:04

2024-10-29 16:41:24

SpringBoot跨域Java

2024-10-18 08:53:49

SpringMybatis微服務

2019-08-29 14:30:16

代碼開發工具

2024-08-02 08:21:52

Spring項目方式

2024-12-02 14:30:20

2019-11-11 17:34:16

前端開發技術

2023-11-17 09:38:21

2019-03-01 09:55:28

HTTPMock架構

2024-08-23 09:00:18

開發跨域請求

2021-04-27 15:20:41

人工智能機器學習技術

2017-05-25 09:45:35

2024-05-20 09:28:44

Spring客戶端瀏覽器

2017-03-12 19:51:38

js實用跨域

2017-08-20 12:49:59

瀏覽器跨域服務器

2020-09-17 13:33:39

開發

2022-04-29 09:11:14

CORS瀏覽器

2009-02-18 09:30:10

AJAX跨域XML

2020-04-13 15:25:01

MySQL數據庫模糊搜索

2024-01-25 11:04:51

跨域問題反向代理層網關層
點贊
收藏

51CTO技術棧公眾號

欧美日韩亚洲国产综合| 日韩中文字幕1| 日韩一区二区三区四区五区六区| 精品国产一区二区三区在线| 99久久夜色精品国产亚洲| 欧美黄在线观看| 精品久久久网站| 男人日女人逼逼| 亚洲xxxxxx| 粉嫩av亚洲一区二区图片| 欧美亚洲第一页| 99热6这里只有精品| 91精品尤物| 色欲综合视频天天天| 伊人狠狠色丁香综合尤物| 亚洲精品一级片| 老司机精品导航| 欧美日本黄视频| 国产一区二区三区精品在线| 日韩中文在线| 欧美午夜片在线观看| www.亚洲成人网| 福利小视频在线观看| 国产精品小仙女| 国产成人在线播放| 久久亚洲成人av| 久久福利综合| 亚洲另类xxxx| 性xxxxxxxxx| 欧美亚洲综合视频| 欧美日韩国产麻豆| 伊人网在线免费| 成a人v在线播放| 91在线视频官网| 91久久久一线二线三线品牌| 中文在线观看av| 国产精品一卡| 欧美激情网站在线观看| 国产高清视频免费在线观看| 日韩中文字幕a| 操你啦在线视频| 国产欧美日韩亚州综合| 国产综合第一页| 国产激情视频在线播放| 日本不卡一二三区黄网| 91av在线不卡| 日韩乱码人妻无码中文字幕| 一区二区三区在线观看免费| 中文字幕日韩精品在线观看| 亚洲永久精品ww.7491进入| 91精品啪在线观看国产手机| 日韩午夜电影在线观看| 男人的天堂最新网址| 久久av影院| 在线观看日韩一区| www黄色在线| 欧美日韩精品免费观看视完整| 午夜电影网一区| 日本aa在线观看| 四虎av在线| 亚洲欧美色综合| 欧美日韩视频免费在线观看| 日韩精品黄色| 自拍偷拍国产精品| 中文字幕日韩一区二区三区| 免费在线观看黄色网| 中文字幕制服丝袜成人av | 久久91亚洲精品中文字幕| 黄色录像一级片| 亚洲女同中文字幕| 欧美成人免费在线视频| 免费无遮挡无码永久在线观看视频 | 美女国产精品| 国产福利成人在线| 亚洲精品中文字幕乱码三区91| 亚洲欧美日韩视频二区| 欧美与黑人午夜性猛交久久久| 91夜夜揉人人捏人人添红杏| 国产综合精品久久久久成人av| 精品一区不卡| www.久久久久| 破处女黄色一级片| 亚洲性感美女99在线| 97超碰蝌蚪网人人做人人爽| 亚洲欧美自拍视频| 麻豆国产91在线播放| 91精品综合久久久久久五月天| 精品人妻一区二区三区麻豆91| 成人听书哪个软件好| 久久精品日韩精品| aiai在线| 一级女性全黄久久生活片免费| 日本人体一区二区| 三上悠亚激情av一区二区三区| 欧美日韩精品一二三区| 丰满少妇中文字幕| 性人久久久久| 久久精品视频在线| 国产福利拍拍拍| 美女国产一区二区| 国产精品久久一区二区三区| 狠狠狠综合7777久夜色撩人| 亚洲欧美日韩在线播放| 日韩a∨精品日韩在线观看| 日韩不卡在线| 亚洲第一精品自拍| 人成免费在线视频| 亚洲区欧美区| 成人黄色av网| 美女欧美视频在线观看免费| 亚洲男同性恋视频| 黄色免费视频大全| 日日夜夜亚洲精品| 亚洲精品国产综合久久| a一级免费视频| 中文高清一区| 91美女片黄在线观| 免费在线国产| 亚洲国产欧美在线人成| 男生操女生视频在线观看| 欧美精品国产白浆久久久久| 久久精品国产99国产精品澳门| 久久久久99精品成人片三人毛片| 欧美色图天堂| 久久久亚洲精品石原莉奈| av动漫在线播放| 国产 日韩 欧美一区| 精品国产91亚洲一区二区三区婷婷| 欧美日韩生活片| 西西人体一区二区| 国产精品一区免费观看| 免费av在线| 欧亚洲嫩模精品一区三区| 国产精品麻豆入口| 欧美激情视频一区二区三区免费| 国产精品高潮呻吟视频| 天堂视频中文在线| 亚洲午夜久久久久久久久电影网| 久久久久久久久久一区| 欧美人与物videos另类xxxxx| 欧美激情国产高清| 亚洲天堂aaa| 久久久天堂av| 欧美乱大交xxxxx潮喷l头像| 欧美xxxx性| 中日韩美女免费视频网址在线观看| 日本熟女一区二区| 狠狠色丁香婷婷综合| 深夜福利成人| 国偷自产一区二区免费视频| 日韩av网址在线观看| 欧美日韩在线观看成人| 免费欧美在线视频| 欧美日韩一区二区视频在线观看| 狼人综合视频| 亚洲国产精品久久| 久久精品一级片| 久久成人18免费观看| 日韩亚洲视频| 色婷婷综合久久久中字幕精品久久| 亚洲第一页自拍| 激情综合网五月天| 日韩av电影天堂| 色综合久久久久久久久五月| 向日葵视频成人app网址| 日韩国产精品一区| 伊人手机在线视频| 久久嫩草精品久久久精品| 人妻精品无码一区二区三区 | 国产成人精品av在线| 性xxxx18| 色综合亚洲欧洲| 一起草在线视频| 国产精品久久久免费 | 天堂网在线免费观看| 国产后入清纯学生妹| 亚洲欧美日韩高清在线| 91沈先生作品| 中文字幕有码在线观看| 日韩精品一区二区三区在线 | 国产有码在线观看| 中文字幕日韩一区| 性生活在线视频| 欧美日韩午夜| 国产综合18久久久久久| 自拍偷拍欧美视频| 在线播放国产一区中文字幕剧情欧美| 亚洲天堂手机在线| 亚洲人成网站影音先锋播放| 性高潮免费视频| 亚洲综合精品| 手机看片福利永久国产日韩| 亚洲三级电影| 欧美精品videosex性欧美| 污污的视频网站在线观看| 日本道精品一区二区三区| 天堂资源在线视频| 国产成人av电影在线| 青青草视频在线免费播放| 九九视频精品全部免费播放| 国产精品香蕉av| 亚洲丝袜精品| 亚洲人成毛片在线播放| 中文字幕在线视频免费| 一区二区三区在线影院| 欧美精品欧美极品欧美激情| 国产一级一区二区| 亚洲人成网站在线观看播放| 一区二区精彩视频| 日韩免费在线免费观看| 污视频在线看网站| 中文字幕欧美日韩va免费视频| 国产a级免费视频| 欧美日韩亚洲一区二区| 午夜黄色福利视频| 成人黄色大片在线观看 | 日本中文字幕电影在线免费观看| 欧美tickling挠脚心丨vk| 免费黄色网址在线| 一区二区在线观看视频在线观看| 日韩中文字幕电影| 国产精品一区在线观看乱码 | 色猫猫国产区一区二在线视频| 欧洲性xxxx| 97精品久久久午夜一区二区三区 | 婷婷伊人五月天| 久久婷婷国产综合精品青草| 性chinese极品按摩| 男女精品视频| 久操手机在线视频| 久久久久久免费视频| 久久久免费看| 电影91久久久| 国产日产久久高清欧美一区| 欧亚在线中文字幕免费| 欧美老肥婆性猛交视频| 亚洲欧洲综合在线| 精品日韩一区二区三区| 91麻豆一区二区| 色综合久久综合中文综合网| 欧美黄色一区二区三区| 成人免费在线视频观看| 亚洲码无人客一区二区三区| 高清成人在线观看| 亚洲女人在线观看| 日韩av电影一区| 男女啪啪网站视频| 麻豆久久精品| 久久久免费视频网站| 亚洲久久一区| 亚洲人成人77777线观看| 成人高清电影网站| 日韩欧美一区二区在线观看| 琪琪久久久久日韩精品| 97se国产在线视频| 欧美成年网站| 147欧美人体大胆444| www久久久| 成人看片人aa| 在线一区视频观看| 国产成人亚洲综合91精品| 92国产精品| 57pao成人永久免费视频| av日韩中文| 91干在线观看| 自拍一区在线观看| 国产va免费精品高清在线| 日韩pacopacomama| …久久精品99久久香蕉国产| 伊人久久在线| 国产精品黄页免费高清在线观看| 欧美精品总汇| 国产精品啪视频| 另类一区二区| 91久久嫩草影院一区二区| 9999在线精品视频| 亚洲一区二区三区久久| 国产三级精品三级在线观看国产| 国产伦精品一区二区三区在线| 波多野结衣欧美| 精品无码久久久久国产| 久久午夜影院| 日韩不卡av| 亚洲成av人片乱码色午夜| 99久久99久久精品| 欧美一区二区三区免费看| www精品久久| 久久久久久久高潮| 黄大色黄女片18第一次| 蜜臀91精品一区二区三区| 下面一进一出好爽视频| 成人激情免费电影网址| 日韩网站在线播放| 中文久久乱码一区二区| 国产一级片免费| 一本到高清视频免费精品| 亚洲精品一区二三区| 欧美最猛黑人xxxxx猛交| 国产草草影院ccyycom| 亚洲国产欧美久久| 欧美巨乳在线| xx视频.9999.com| 成人福利电影| 国产精品99蜜臀久久不卡二区| 日韩在线你懂得| 久久精品美女| 日本久久精品| 隔壁人妻偷人bd中字| 久久久夜夜夜| 性高潮免费视频| 国产精品久久久一本精品| 久草视频中文在线| 91国产成人在线| 日日躁夜夜躁白天躁晚上躁91| 国产午夜精品一区二区三区| 特级毛片在线| 国产精品国产自产拍高清av水多 | 国产理论电影在线| 国产国语videosex另类| 国产精品传媒麻豆hd| 久久久久网址| 欧美黄色免费| 视频在线观看免费高清| 国产·精品毛片| 最新日韩免费视频| 一区二区高清在线| 伊人成人在线观看| 精品国产伦一区二区三区观看体验| 精品99又大又爽又硬少妇毛片| 美女少妇精品视频| 88xx成人网| 国产欧美日韩伦理| 欧美国产91| 向日葵污视频在线观看| 国产传媒日韩欧美成人| av片在线免费看| 一本久久精品一区二区| 天天干天天插天天操| 欧美不卡视频一区发布| 色噜噜成人av在线| 日韩欧美视频一区二区三区四区 | 激情成人开心网| 韩国午夜理伦三级不卡影院| 中文字幕被公侵犯的漂亮人妻| 午夜伦理一区二区| 96日本xxxxxⅹxxx17| 在线播放日韩专区| 亚洲不卡系列| 精品国产福利| 国产欧美亚洲一区| 亚洲精品久久一区二区三区777 | 欧美另类z0zxhd电影| 免费在线一级视频| 欧美亚洲另类在线| 国产女人18毛片水真多18精品| 999一区二区三区| 国产精品一区一区| 欧美日韩三级在线观看| 欧美一级夜夜爽| 在线观看免费视频你懂的| 3d动漫啪啪精品一区二区免费| 成人看的视频| 我要看一级黄色大片| 国产午夜精品一区二区三区嫩草| 久久精品视频7| 亚洲国内精品视频| 男人av在线播放| 久草精品电影| 欧美在线资源| 激情av中文字幕| 亚洲成人av一区二区三区| 天天操天天干天天插| 91精品国产高清自在线| 欧美wwwsss9999| 国产91对白刺激露脸在线观看| 粉嫩嫩av羞羞动漫久久久| 日本一区二区网站| 亚洲精品综合精品自拍| 日本乱码一区二区三区不卡| 久久久久高清| 久久福利精品| 国产99在线 | 亚洲| 欧美日韩久久一区二区| 超碰在线免费播放| 国产视频99| 久久国产日韩欧美精品| 国产精品丝袜一区二区| 欧美va在线播放| 涩涩视频在线播放| 亚洲精品国产精品国自产观看| 精品一区二区三区在线播放视频| 亚洲欧美va天堂人熟伦| 欧美巨大另类极品videosbest | 男人的天堂久久久| 欧美一区二区福利在线| 黄页在线观看免费| 欧美人与物videos另类| 久久精品国产精品亚洲红杏| 欧美又粗又大又长| 亚洲男人天堂古典|