博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Springboot中关于跨域问题的一种解决方法
阅读量:6815 次
发布时间:2019-06-26

本文共 2401 字,大约阅读时间需要 8 分钟。

前后端分离开发中,跨域问题是很常见的一种问题。本文主要是解决 springboot 项目跨域访问的一种方法,其他 javaweb 项目也可参考。

1.首先要了解什么是跨域

由于前后端分离开发中前端页面与后台在不同的服务器上,必定会出现跨区问题。关于更具体的信息,可以看这里:

2.springboot中通过配置Filter来解决跨域问题
2-1.首先看一下会出现跨域问题的代码:

前端代码:

Insert title here

Test

  • click
  • 出现了跨域问题:

    后端代码:

    import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;import java.util.Map;@RestController@RequestMapping(value = "/example")public class CrosTestController {    @GetMapping(value = "/testget")    public Map
    testGet(){ Map
    testMap = new HashMap<>(); testMap.put("name", "jack"); //用来打印验证后端代码确实执行了,即该接口确实被访问了 System.out.println("执行了!"); return testMap; }}
    2-2.解决问题:

    无需改动前端代码,在 springboot 项目中添加全局过滤器:

    import com.example.filter.CrosFilter;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.context.annotation.Bean;@SpringBootApplicationpublic class exampleApplication {	public static void main(String[] args) {		SpringApplication.run(exampleApplication.class, args);	}	/**	 * 配置跨域访问的过滤器	 * @return	 */	@Bean	public FilterRegistrationBean registerFilter(){		FilterRegistrationBean bean = new FilterRegistrationBean();		bean.addUrlPatterns("/*"); 		bean.setFilter(new CrosFilter());		return bean;	}}

    过滤器:

    import javax.servlet.*;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class CrosFilter implements javax.servlet.Filter {    @Override    public void init(FilterConfig filterConfig) throws ServletException {    }    @Override    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {        HttpServletResponse res = (HttpServletResponse) servletResponse;        //*号表示对所有请求都允许跨域访问        res.addHeader("Access-Control-Allow-Origin", "*");        res.addHeader("Access-Control-Allow-Methods", "*");        filterChain.doFilter(servletRequest, servletResponse);    }    @Override    public void destroy() {    }}

    再看前端访问结果,已经可以正常访问了:

    【补充】其实跨域问题还有其它的解决方法,这里有一个关于跨域问题的课程,把跨域及其处理方法讲的很清楚,学习链接。

    转载于:https://www.cnblogs.com/zishu/p/10727230.html

    你可能感兴趣的文章
    调查显示:明年容器企业级用户将出现井喷式增长
    查看>>
    官方实锤!微软宣布以 75 亿美元收购 GitHub
    查看>>
    一个Java架构进阶必修体系图(只要思想不滑坡,方法总比困难多) ...
    查看>>
    MySQL 是如何解决幻读的
    查看>>
    Some methods of deep learning and dimensionality reduction
    查看>>
    天马行空脚踏实地,阿里巴巴有群百里挑一的天才应届生 ...
    查看>>
    「镁客早报」高通称若没有苹果订单无需每年升级芯片;小米进行第二次回购 ...
    查看>>
    生产实践Kafka与ELK
    查看>>
    Eclipse的PropertiesEditor切换大小写
    查看>>
    Android多线程源码详解一:handler、looper、message、messageQueue
    查看>>
    SaaS加速器II 能力中心:互利互补 共享商业红利
    查看>>
    病毒木马防御与分析实战
    查看>>
    分布式工作流任务调度系统Easy Scheduler正式开源
    查看>>
    Flutter实战(一)写一个天气查询的APP
    查看>>
    Golang 入门系列(十) mysql数据库的使用
    查看>>
    Python零基础学习笔记(十二)—— 字符串及其常用方法
    查看>>
    数据脱敏平台-大数据时代的隐私保护利器
    查看>>
    区块链教程Fabric1.0源代码分析ledgerID数据库-兄弟连区块链教程
    查看>>
    轻松上云系列之二:其他云数据迁移至阿里云
    查看>>
    sql server 高可用性技术总结
    查看>>