标签:客户端 图片 col 信息 方法 服务端 而不是 开发 port
在学习SpringBoot过程中,遇到了这样一个问题。当时用SpringBoot开发Rest服务接口,然后用Ajax请求获取数据,来实现前后端分离。但是在前端请求时,始终不能显示应该显示的数据。从浏览器的控制台报错来看(如下图),应该是遇到了跨域安全的问题。
要解决这个问题,首先得知道为什么会出现这个问题。通过了解,出现跨域安全问题的原因一般是以下三个问题:浏览器收到了正确的返回数据但是做出了限制、发出去的请求是XMLHttpRequest请求而不是JSON请求、前后端协议域名端口等不一样造成了跨域。
1 /*SpringBoot启动类*/ 2 package net.tsingmo.SpringBootDemo; 3 4 import org.springframework.boot.SpringApplication; 5 import org.springframework.boot.autoconfigure.SpringBootApplication; 6 import org.springframework.boot.web.servlet.FilterRegistrationBean; 7 import org.springframework.context.annotation.Bean; 8 9 @SpringBootApplication 10 public class SpringBootDemoApplication { 11 12 public static void main(String[] args) { 13 SpringApplication.run(SpringBootDemoApplication.class, args); 14 } 15 16 @Bean 17 public FilterRegistrationBean filterRegistrationBean () { 18 FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); 19 filterRegistrationBean.addUrlPatterns("/*"); 20 filterRegistrationBean.setFilter(new ResponseHeaderFilter()); 21 return filterRegistrationBean; 22 } 23 }
1 /*ResponseHeaderFilter类*/ 2 package net.tsingmo.SpringBootDemo; 3 4 import javax.servlet.*; 5 import javax.servlet.http.HttpServletResponse; 6 import java.io.IOException; 7 8 public class ResponseHeaderFilter implements javax.servlet.Filter { 9 @Override 10 public void init(FilterConfig filterConfig) throws ServletException {} 11 12 @Override 13 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 14 HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse; 15 httpServletResponse.addHeader("Access-Control-Allow-Origin", "*"); 16 httpServletResponse.addHeader("Access-Control-Allow-Methods", "GET"); 17 filterChain.doFilter(servletRequest, httpServletResponse); 18 } 19 20 @Override 21 public void destroy() {} 22 }
标签:客户端 图片 col 信息 方法 服务端 而不是 开发 port
原文地址:https://www.cnblogs.com/Tsingmo/p/9130796.html