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版本解决跨域问题的主要内容,如果未能解决你的问题,请参考以下文章