Day57跨域问题**

跨域问题

  • (1)什么是跨域
    当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域
  • (2)为什么会出现跨域
    出于浏览器的同源策略限制
    同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能
    同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。
    http://localhost:8001
    http://localhost:8002
    所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)

Day57跨域问题**_第1张图片

跨域问题解决办法

  • (1)直接采用SpringBoot的注解@CrossOrigin
    Controller层在需要跨域的类或者方法上加上该注解即可
  • (2)采用过滤器的方式

@CrossOrigin

@CrossOrigin //本类所有的方法都支持跨域请求,浏览器不会拦截跨域的请求

public class UserController

Filter

 <dependency>
            <groupId>javax.servletgroupId>
            <artifactId>javax.servlet-apiartifactId>
            <version>3.0.1version>
            <scope>providedscope>
        dependency>
    dependencies>
@Component
@Slf4j
public class SimpleCORSFilter implements Filter {

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

        HttpServletResponse response = (HttpServletResponse) res;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "PUT,POST, GET, OPTIONS, DELETE, HEAD");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "access-control-allow-origin, authority, content-type, version-info, X-Requested-With");
        chain.doFilter(req, res);
        log.info("filter");
    }

    public void init(FilterConfig filterConfig) {
    }

    public void destroy() {
    }

}

你可能感兴趣的:(http)