Spring Boot2.XX版本解决跨域问题

Posted il_持之以恒_li

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot2.XX版本解决跨域问题相关的知识,希望对你有一定的参考价值。

最近在做毕设的时候,遇到了跨域问题。就是我现在做了一个比较简单的安卓登录界面,使用XBuilder上运行到浏览器,然后它默认生成的端口号为8080,但是我这边后端服务器配置端口号为9999,从而导致出现跨域情况。下面这一段话是对跨域的解释,跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。通常所说的跨域是狭义的,是由浏览器同源策略限制的一类请求场景。从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。我这种情况应该是因为端口号不同导致的。

我想实现在安卓端登录,但是报错如下:

翻译一下报错信息如下:

看情况真的是因为端口号不一致导致的情况,但是搞成相同的话会出现端口号冲突。
到网上找了很久也没有找到具体解决办法,最后在B站看到了一个视频,讲跨域的,终于把它解决了。
b站视频链接为:什么是跨域以及如何解决?,他的视频讲解主要从后端方面讲解怎样解决跨域问题的。

1. 解决办法1,添加注解@CrossOrigin

在请求方法上加上注解@CrossOrigin 即可,如下:

	@RequestMapping(value = "login")
    @CrossOrigin   // 解决跨域问题
    public UserMain login(@RequestParam(value = "user") String user,@RequestParam(value = "pwd") String pwd)
        UserMain userMain = us.selectByAn(user);
        if(userMain!=null && userMain.getuPsd().equals(pwd))
            return userMain;
        
        return null;
     // 手机端登录

运行结果:

此时已经成功跳转到另外一个界面了。

2. 解决办法2,添加一个过滤器

方法1虽然简单方便,但是如果这种方法很多,用这种方式是不是就显得比较繁琐了呢?总不可能每个方法上加上这个注解吧!过滤器配置类代码如下:

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 CorsConfigurer 

    @Bean
    public CorsFilter CorsFilter()

        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*");
        //  允许哪些域来访问,这里*代表全部
        corsConfiguration.addAllowedHeader("*");
        // 允许哪些请求头
        corsConfiguration.addAllowedMethod("*");
        //  允许哪些请求方式 get post put delete
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();

        source.registerCorsConfiguration("/**",corsConfiguration);

        return new CorsFilter(source);
    


运行结果和方法1一样。

3. 解决方法3,实现WebMvcConfigurer接口,重写addCorsMappings方法

参考代码如下:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MyMvcConfig implements WebMvcConfigurer 

    @Override
    public void addCorsMappings(CorsRegistry registry) 
        registry.addMapping("/**")
                .allowedOriginPatterns("*")
                .allowedMethods("GET","POST")
                .allowCredentials(true)
                .allowedHeaders("*");
    

运行结果和方法1一样。

以上是关于Spring Boot2.XX版本解决跨域问题的主要内容,如果未能解决你的问题,请参考以下文章

跨域问题解决

springmvc用@crossorigin解决跨域 ajax怎么写

Spring Boot 中处理跨域

跨域:跨域及解决方法

ajax本地跨域请求以及解决方法

Spring MVC学习(11)—跨域的介绍以及使用CORS解决跨域问题