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

Spring Cloud項(xiàng)目前后端分離跨域的操作

 更新時(shí)間:2021年06月25日 12:53:15   作者:zhuwei_clark  
這篇文章主要介紹了Spring Cloud項(xiàng)目前后端分離跨域的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

跨域問題,其實(shí)百度上面有一堆的解決方案

針對(duì)普通的情況其實(shí)百度上面的方案都是可行的。

我這里主要介紹2種情況。

當(dāng)然我這里的配置都是基于網(wǎng)關(guān)的,而不是基于服務(wù)的。

1、沒有增加權(quán)限驗(yàn)證。

2、增加了spring security的權(quán)限驗(yàn)證(我這里是基于keyCloak),增加了Authorization

首先我們介紹第一種情況的解決方法,這個(gè)很簡單,只需要在啟動(dòng)類里面配置過濾器就可以解決。

@Bean
    public CorsFilter corsFilter() {
        //1.添加CORS配置信息
        CorsConfiguration config = new CorsConfiguration();
          //放行哪些原始域
          config.addAllowedOrigin("*");
          //是否發(fā)送Cookie信息
          config.setAllowCredentials(true);
          //放行哪些原始域(請(qǐng)求方式)
          config.addAllowedMethod("*");
          //放行哪些原始域(頭部信息)
          config.addAllowedHeader("*");
          //暴露哪些頭部信息(因?yàn)榭缬蛟L問默認(rèn)不能獲取全部頭部信息)
          config.addExposedHeader("*");
 
        //2.添加映射路徑
        UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
        configSource.registerCorsConfiguration("/**", config);
 
        //3.返回新的CorsFilter.
        return new CorsFilter(configSource);
    }

我遇到情況就是第二種了,這種情況上面的方式基本沒有作用,我這里使用的是keyCloak做的權(quán)限驗(yàn)證。

首先增加過濾器配置:

@Component
public class CorsControllerFilter implements Filter{
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}
 
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// TODO Auto-generated method stub
		HttpServletResponse res = (HttpServletResponse) response;
		res.setContentType("text/html;charset=UTF-8");
		res.setHeader("Access-Control-Allow-Origin", "*");
		res.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE ,PUT");
		res.setHeader("Access-Control-Max-Age", "3600");
		res.setHeader("Access-Control-Allow-Headers", "*");
		res.setHeader("Access-Control-Allow-Credentials", "true");
		res.setHeader("XDomainRequestAllowed", "1");
		chain.doFilter(request, response);
	}
 
	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub	
	}
}

在啟動(dòng)類中增加配置

    @Bean
 public FilterRegistrationBean filterRegistrationBean() {
     FilterRegistrationBean registrationBean = new FilterRegistrationBean();
     CorsControllerFilter corsControllerFilter = new CorsControllerFilter();
     registrationBean.setFilter(corsControllerFilter);
     return registrationBean;
 }

但是針對(duì)某些請(qǐng)求,他會(huì)先請(qǐng)求OPTIONS請(qǐng)求,造成權(quán)限驗(yàn)證失敗。所以增加攔截器配置,對(duì)所有的OPTIONS的請(qǐng)求直接放行,返回200的狀態(tài)。

public class OptionsInterceptor implements HandlerInterceptor {
 
	@Override
	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		// TODO Auto-generated method stub
	}
 
	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
			throws Exception {
		// TODO Auto-generated method stub
	}
 
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		// TODO Auto-generated method stub
        if(request.getMethod().equals("OPTIONS")){
            response.setStatus(HttpServletResponse.SC_OK);
            return false;
        }
        return true;
	}
}

配置web配置文件,加載攔截器。

@Configuration
public class WebMvcConfiguration extends WebMvcConfigurationSupport{
 @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new OptionsInterceptor()).addPathPatterns("/**");
 }
}

本來以為這樣配置了應(yīng)該是可以了,但是在請(qǐng)求的時(shí)候OPTIONS的請(qǐng)求居然還是報(bào)跨域的問題,增加攔截器允許跨域配置

public class CrossInterceptor implements HandlerInterceptor{
 @Override
 public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
   throws Exception {
  // TODO Auto-generated method stub
 }
 
 @Override
 public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
   throws Exception {
  // TODO Auto-generated method stub
 }
 
 @Override
 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  // TODO Auto-generated method stub
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT, HEAD");
        response.setHeader("Access-Control-Allow-Headers", "*");
        response.setHeader("Access-Control-Max-Age", "3600");
        return true;
 }
}

在WebMvcConfiguration里面增加配置,注意要寫在OptionsInterceptor的前面

registry.addInterceptor(new CrossInterceptor()).addPathPatterns("/**");

繼續(xù)測試,跨域問題解決。對(duì)于原理其實(shí)我也不太清楚,歡迎各位溝通交流。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java中元素排序Comparable和Comparator的區(qū)別

    java中元素排序Comparable和Comparator的區(qū)別

    本文主要介紹了java中元素排序Comparable和Comparator的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 使用ScheduledThreadPoolExecutor踩過最痛的坑

    使用ScheduledThreadPoolExecutor踩過最痛的坑

    這篇文章主要介紹了使用ScheduledThreadPoolExecutor踩過最痛的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Java編程實(shí)現(xiàn)高斯模糊和圖像的空間卷積詳解

    Java編程實(shí)現(xiàn)高斯模糊和圖像的空間卷積詳解

    這篇文章主要介紹了Java編程實(shí)現(xiàn)高斯模糊和圖像的空間卷積詳解,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • SpringBoot項(xiàng)目中日志管理與調(diào)優(yōu)指南

    SpringBoot項(xiàng)目中日志管理與調(diào)優(yōu)指南

    在 Spring Boot 開發(fā)過程中,日志管理是開發(fā)者必須掌握的重要技能之一,合理的日志配置不僅能幫助開發(fā)者追蹤應(yīng)用程序的執(zhí)行流程、定位問題,還能提升應(yīng)用程序的可維護(hù)性,本文將詳細(xì)探討 Spring Boot 項(xiàng)目中日志管理的常見問題、解決方案以及最佳實(shí)踐
    2024-10-10
  • Spring源碼解析之編程式事務(wù)

    Spring源碼解析之編程式事務(wù)

    今天給大家?guī)淼氖顷P(guān)于Java Spring的相關(guān)知識(shí),文章圍繞著Spring編程式事務(wù)展開,文中有非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06
  • Spring Boot應(yīng)用發(fā)布到Docker的實(shí)現(xiàn)

    Spring Boot應(yīng)用發(fā)布到Docker的實(shí)現(xiàn)

    這篇文章主要介紹了Spring Boot應(yīng)用發(fā)布到Docker的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • IDEA 的基本介紹使用及斷點(diǎn)調(diào)試技巧

    IDEA 的基本介紹使用及斷點(diǎn)調(diào)試技巧

    IDEA 是 JetBrains 公司的產(chǎn)品,總部位于捷克的首都布拉格,IDEA在業(yè)界被公認(rèn)為最好的 Java 開發(fā)工具,今天通過本文給大家介紹IDEA 的基本介紹使用及斷點(diǎn)調(diào)試技巧,感興趣的朋友跟隨小編一起看看吧
    2021-11-11
  • 使用Java實(shí)現(xiàn)轉(zhuǎn)換掃描的文檔為可搜索的PDF

    使用Java實(shí)現(xiàn)轉(zhuǎn)換掃描的文檔為可搜索的PDF

    這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)轉(zhuǎn)換掃描的文檔為可搜索的PDF,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • Java基礎(chǔ)之二叉搜索樹的基本操作

    Java基礎(chǔ)之二叉搜索樹的基本操作

    發(fā)現(xiàn)許多小伙伴還不清楚Java二叉搜索樹的基本操作,今天特地整理了這篇文章,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)Java的小伙伴很有幫助,需要的朋友可以參考下
    2021-05-05
  • Java的接口調(diào)用時(shí)的權(quán)限驗(yàn)證功能的實(shí)現(xiàn)

    Java的接口調(diào)用時(shí)的權(quán)限驗(yàn)證功能的實(shí)現(xiàn)

    這篇文章主要介紹了Java的接口調(diào)用時(shí)的權(quán)限驗(yàn)證功能的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評(píng)論

景洪市| 留坝县| 东至县| 贵阳市| 海丰县| 柳江县| 钦州市| 常州市| 辽阳县| 衡水市| 长海县| 荔浦县| 甘泉县| 阳曲县| 资阳市| 达尔| 延川县| 东阿县| 金昌市| 拜泉县| 隆德县| 廊坊市| 金门县| 琼结县| 迁西县| 普兰店市| 理塘县| 林州市| 河池市| 阳高县| 托克逊县| 读书| 海门市| 罗田县| 监利县| 崇明县| 缙云县| 额济纳旗| 迭部县| 安化县| 连江县|