91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Springboot2.X如何全方位解決Cors跨域

發布時間:2021-10-20 16:58:46 來源:億速云 閱讀:166 作者:柒染 欄目:大數據

Springboot2.X如何全方位解決Cors跨域,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

一、概念理解Cors

1.1、什么是Cors?

      直接解釋為跨域,是一個比jsonp更優秀的存在,JSONP只支持Get請求,CORS支持所有類型的HTTP請求。

1.2、什么是跨域?

      同源是指,域名、協議、端口均為相同,如果三者有其一不同,都算作跨域,A網站的ajax訪問B網站的接口就是跨域,如下解釋

非跨域: 
      http://www.osc.com/index.html      調用 http://www.osc.com/index.php   非跨域跨 域:      http://www.osc.com/index.html      調用 http://www.qq.com/index.php    跨域,主域不同 
      http://abc.osc.com/index.html      調用 http://def.osc.com/server.php  跨域,子域名不同 
      http://www.osc.com:8080/index.html 調用 http://www.osc.com/server.php  跨域,端口不同 
      https://www.osc.com/index.html     調用 http://www.osc.com/server.php  跨域,協議不同(https和http的區別)
二、準備A項目

      準備2個Springboot項目,不同端口號,A項目ajax訪問B項目接口,算是跨域訪問,我會把所有用到的代碼都放到上面,省的大家評論為啥我這不行...

      A項目:springboot+freemaker

 2.1、pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

2.2、application.properties

server.port=8089
server.servlet.context-path=/tssd

#thymeleaf
spring.mvc.view.prefix=classpath:/templates/
spring.mvc.view.suffix=.html
spring.thymeleaf.cache=false
spring.mvc.static-path-pattern=/**
spring.resources.static-locations =classpath:/static/
spring.thymeleaf.mode=LEGACYHTML5

2.3、controller

@Controller
public class EveryController {
    @RequestMapping(value = "/every/{url}")
    public String toEveryUrl(@PathVariable("url") String url){
        return url;
    }
}

2.4、templates文件夾下index.html,現在此ajax訪問的是8082,所以B項目端口號必須是8082

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>xixi</title>
    <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
</head>
<body>
    i love you,my beast love girl aoxin
<script>
    $(function() {
        $.ajax({
            url : "http://localhost:8082/test",
            type : "POST",
            dataType: "json",
            success : function(data) {
                alert(data.data);
            },
            error: function () {
                alert("錯誤");
            }
        });
    })
</script>
</body>
</html>

一會我們就直接通過接口 http://localhost:8089/tssd/every/index 就直接到了index.html,然后頁面加載函數ajax請求B項目接口。

三、B項目創建

3.1、pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

3.2、application.properties

server.port=8082

3.3、實體類

@Data
@AllArgsConstructor
public class Result {
    private boolean success;
    private String code;
    private String message;
    private Object data;
    public Result() {
        this.success = true;
        this.code = "200";
    }
}

然后其他的就先不需要配置了,到此為止,B項目結束。

四、方法一:method局部解決跨域

      是針對某一個接口解決跨越問題。

      在B項目中,使用注解在方法上,這樣我們這個方法就可以被跨域了。

@CrossOrigin(origins = "http://localhost:8089",maxAge = 3600)
@RequestMapping(value = "/test",method = RequestMethod.POST)
@ResponseBody
public Result testOne(){
    Result result = new Result();
    result.setData("fjsd");
    return result;
}

      http://localhost:8089/tssd/every/index

Springboot2.X如何全方位解決Cors跨域

五、方法二:局部解決跨域之類

      把方法一作用在方法上的注解CrossOrigin作用到類上,這樣,該類的所有方法都可以被跨域。

@Controller
@CrossOrigin(origins = "http://localhost:8089",maxAge = 3600)
public class FirstController {

    @RequestMapping(value = "/test",method = RequestMethod.POST)
    @ResponseBody
    public Result testOne(){
        Result result = new Result();
        result.setData("fjsd");
       return result;
    }
}

    Springboot2.X如何全方位解決Cors跨域

      成功截圖和上面是一樣的,但是實現方式是不一樣的。當然,如果你的注解只寫成

@CrossOrigin(maxAge = 3600)

     那么它是可以允許任何網站都可以訪問的,已經測試了,大家可以把origins去掉就可以了origins

六、方法三:全局配置解決跨域

      把方法一、方法二的注解去掉,添加全局配置,配置可以跨域的接口路徑等等。

@Configuration
public class MyCrosConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/test")
                .allowedOrigins("http://localhost:8089")
                .allowedMethods("PUT", "DELETE","POST","GET")
                .allowedHeaders("*")
                .maxAge(3600);
    }
}
七、方法四:過濾器解決跨域

      可以把之前的三個方法的注解或者@Configuration都去掉,接下里我們用第四種方法測試。

@Configuration
public class CrosFilter {
    @Bean
    CorsFilter getCorsFilter(){
        CorsConfiguration cors = new CorsConfiguration();
        cors.setAllowCredentials(true);
        cors.addAllowedMethod("*");
        cors.addAllowedOrigin("*");
        cors.setMaxAge(3600L);
        cors.addAllowedHeader("*");
        cors.applyPermitDefaultValues();

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**",cors);

        CorsFilter corsFilter = new CorsFilter(source);
        return corsFilter;
    }
}

      結果:成功。

八、總結

      其實不僅僅有局部方法、局部類、全局配置以及過濾器方法,還有xml方式,只不過個人不喜歡,所以就不介紹給大家,畢竟Springboot不提倡用xml,喜歡的話可以關注我,嘻嘻。

關于Springboot2.X如何全方位解決Cors跨域問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安顺市| 灵台县| 繁峙县| 鱼台县| 云浮市| 灵宝市| 建昌县| 阜新| 民县| 六枝特区| 抚顺市| 巧家县| 阳泉市| 宁津县| 马山县| 巴青县| 石景山区| 金溪县| 卢氏县| 确山县| 扶沟县| 霞浦县| 新巴尔虎右旗| 庆元县| 罗源县| 南京市| 黑河市| 灵丘县| 宁明县| 宿州市| 水富县| 当涂县| 乌什县| 柳州市| 辽宁省| 道孚县| 青阳县| 沾益县| 阿巴嘎旗| 晴隆县| 呼图壁县|