前后端分离项目出现CORS错误

10 篇文章 0 订阅

前后端分离项目中接口请求后端数据时出现cors错误,错误原因是跨域请求失败。

一、我们首先先来了解什么是跨域?

        跨域,指的是跨域名访问,跨域的问题是浏览器对于Ajax请求的一种安全限制,能有效的阻止跨站攻击【由于浏览器的同源策略(同源策略,同协议,同域名,同端口),即属于不同域的页面之间不能相互访问各自的页面内容】。

        

        注:域名和端口号相同,但请求路径不同,不属于跨域。

                        (例子,www.csdn.com:8554/login 和 www.csdn.com:8554/user)

二、解决跨域问题

  • Jsop,最早的解决方案,利用script标签src属性来实现跨域,但是只能发起get请求;
  • CORS,跨域资源共享,规范化的跨域请求解决方法,可以自定义规则,支持各种请求方式;
  • Nginx,反向代理,利用nginx的特性,把跨域变为不跨域,支持各种请求;

三、用CORS解决跨域问题

        在后端添加配置类,继承WebMvcConfigurer,并重写addCorsMappings方法

        

        之后重启项目就可以正常运行了

 

 

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
ruoyi的前后端分离可以通过以下步骤访问swagger。 1. 后端配置 在ruoyi-admin模块中的Swagger2Config类中,将api-docs的访问路径设置为全局跨域访问: ``` @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.ruoyi.project.**.controller")) .paths(PathSelectors.any()) .build() .pathMapping("/") .directModelSubstitute(LocalDate.class, String.class) .genericModelSubstitutes(ResponseEntity.class) .useDefaultResponseMessages(false) .enableUrlTemplating(true) .globalResponseMessage(RequestMethod.GET, responseMessages()) .securitySchemes(securitySchemes()) .securityContexts(securityContexts()) .enable(true); } private List<ResponseMessage> responseMessages() { List<ResponseMessage> responseMessages = new ArrayList<>(); responseMessages.add(new ResponseMessageBuilder().code(404).message("资源不存在").build()); responseMessages.add(new ResponseMessageBuilder().code(400).message("请求参数错误").build()); responseMessages.add(new ResponseMessageBuilder().code(500).message("服务器内部错误").build()); return responseMessages; } private List<ApiKey> securitySchemes() { List<ApiKey> apiKeyList = new ArrayList<>(); apiKeyList.add(new ApiKey("token", "token", "header")); return apiKeyList; } private List<SecurityContext> securityContexts() { List<SecurityContext> securityContexts = new ArrayList<>(); securityContexts.add(SecurityContext.builder() .securityReferences(defaultAuth()) .forPaths(PathSelectors.regex("^(?!auth).*$")) .build()); return securityContexts; } List<SecurityReference> defaultAuth() { AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; authorizationScopes[0] = authorizationScope; return new ArrayList<>(Arrays.asList( new SecurityReference("token", authorizationScopes))); } ``` 2. 前端配置 在ruoyi-admin模块的/src/main/resources/application.yml文件中,添加以下配置: ``` cors: allowed-origins: '*' allowed-methods: GET, POST, PUT, DELETE, OPTIONS allowed-headers: '*' exposed-headers: Authorization, Token, Content-Disposition max-age: 1800 ``` 3. 访问swagger 然后,在浏览器中访问`http://localhost:8080/swagger-ui.html`,即可访问swagger。如果出现跨域问题,可以参考以上配置进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值