黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java學(xué)習(xí) 實(shí)現(xiàn)Java跨域訪問的方式

實(shí)現(xiàn)Java跨域訪問的方式

更新時間:2022-10-28 10:45:29 來源:動力節(jié)點(diǎn) 瀏覽2130次

什么是跨域?為什么會出現(xiàn)跨域

定義:當(dāng)一個請求url的協(xié)議、域名、端口三者之間任意一個與當(dāng)前頁面url不同即為跨域。

原因:在前后端分離的模式下,前后端的域名是不一致的,此時就會發(fā)生跨域訪問問題。在請求的過程中我們要想回去數(shù)據(jù)一般都是post/get請求,所以..跨域問題出現(xiàn)。

Java實(shí)現(xiàn)跨域方式

1. 返回新的 CorsFilter(全局跨域)

package org.chuancey.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@Configuration
public class GlobalCorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        //1. 添加 CORS配置信息
        CorsConfiguration config = new CorsConfiguration();
        // 放行哪些原始域
        config.addAllowedOrigin("*");
        // 是否發(fā)送 Cookie
        config.setAllowCredentials(true);
        // 放行哪些請求方式
        config.addAllowedMethod("*");
        // 放行哪些原始請求頭部信息
        config.addAllowedHeader("*");
        // 暴露哪些頭部信息
        config.addExposedHeader("*");
        //2. 添加映射路徑
        UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();
        corsConfigurationSource.registerCorsConfiguration("/**",config);
        //3. 返回新的CorsFilter
        return new CorsFilter(corsConfigurationSource);
    }
}

2. 重寫 WebMvcConfigurer(全局跨域)

package org.chuancey.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                //放行哪些原始域
                .allowedOrigins("*")
                .allowedHeaders("*")
                // 是否發(fā)送Cookie
                .allowCredentials(true)
                .allowedMethods("GET", "POST", "OPTIONS", "DELETE", "PUT", "PATCH")
                .maxAge(3600);
    }
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**")
                .addResourceLocations("classpath:/static/");
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("doc.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
}

3. 使用注解 (局部跨域)

在控制器(類上)上使用注解 @CrossOrigin,表示該類的所有方法允許跨域。

@RestController
@CrossOrigin(origins = "*")
public class VerificationController {
}

在方法上使用注解 @CrossOrigin

@PostMapping("/check/phone")
    @CrossOrigin(origins = "*")
    public boolean checkPhoneNumber(@RequestBody @ApiParam VerificationPojo verification) throws BusinessException {
        return false;
    }

4. 手動設(shè)置響應(yīng)頭(局部跨域)

使用 HttpServletResponse 對象添加響應(yīng)頭(Access-Control-Allow-Origin)來授權(quán)原始域,這里 Origin的值也可以設(shè)置為 “*”,表示全部放行。

@RequestMapping("/home")
public String home(HttpServletResponse response) {
    response.addHeader("Access-Allow-Control-Origin","*");
    return "home";
}

5. 使用自定義filter實(shí)現(xiàn)跨域

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;
@Slf4j
@Configuration
@WebFilter(filterName = "accessFilter", urlPatterns = "/*")
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) {log.info("AccessFilter過濾器初始化!");}
  public void destroy() {}
}

xml使自定義Filter生效方式

<!-- 跨域訪問 START-->
<filter>
 <filter-name>CorsFilter</filter-name>
 <filter-class>org.chuancey.filter.MyCorsFilter</filter-class>
</filter>
<filter-mapping>
 <filter-name>CorsFilter</filter-name>
 <url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 跨域訪問 END  -->

 

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 中国护士一级毛片免费版本 | 手机看片高清日韩精品 | 天天操天天摸天天干 | 欧美极品第一页 | 免费精品视频 | 在线观看精品视频网站www | 黄色天堂网站 | 日韩 在线视频精品 | 天天摸夜班摸天天碰 | 国产欧美精品一区二区三区 | 一本中文字幕一区 | 97久久精品人人澡人人爽 | 在线视频 亚洲 | 波多久久夜色精品国产 | 欧洲成人在线观看 | 看成年女人免费午夜视频 | 美日毛片 | 黄色片日本网站 | 男人把女人下部桶爽的视频 | 荡女淫春未删减在线观看 | 天天干夜夜爽天天操夜夜爽视频 | 欧美一级在线免费观看 | 国产精品视频区 | 午夜视频十八嗯嗯啊免费 | 日韩亚洲一区中文字幕 | 最近最新中文字幕高清免费 | 五月综合色啪 | 国产黄色影院 | 黄色网址免费在线观看 | 欧美日本一 | www.狠狠干| 免费一级毛片在播放视频 | 国产成人做受免费视频 | www.精品 | 国产精品一区二区不卡 | a国产视频| 美女被cao免费看在线看网站 | 亚洲黄视频在线观看 | 国产精欧美一区二区三区 | 国产亚洲精品拍拍拍拍拍 | 国产伦精品一区二区三区 |