动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

Spring MVC解决跨域请求

09-02 17:24 58浏览
举报 T字号
  • 大字
  • 中字
  • 小字

在用Spring MVC解决跨域请求之前,我们先来看看什么是跨域。跨域限制是浏览器行为,不是服务器行为。 浏览器认为地址栏输入时安全的,所以不限制认为是跨域。所以,只要服务器配置为所有域都可以进行请求,那么不在服务器运行的HTML就可以完成http请求。

为了更好的解决Spring MVC跨域请求,我们再来看看跨域的核心方法,同源策略:同源指的是域名(或IP),协议,端口都相同,不同源的客户端脚本(javascript、ActionScript)在没明确授权的情况下,不能读写对方的资源。同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。

设想这样一种情况:A网站是一家银行,用户登录以后,又去浏览其他网站。如果其他网站可以读取A网站的Cookie,会发生什么?

很显然,如果Cookie包含隐私(比如存款总额),这些信息就会泄漏。更可怕的是,Cookie往往用来保存用户的登录状态,如果用户没有退出登录,其他网站就可以冒充用户,为所欲为。因为浏览器同时还规定,提交表单不受同源政策的限制。由此可见,"同源政策"是必需的,否则 Cookie 可以共享,互联网就毫无安全可言了。

同源策略限制以下几种行为:

-Cookie、LocalStorage 和 IndexDB 无法读取

-DOM 和 Js对象无法获得

-AJAX 请求不能发送

SpringMVC解决跨域问题方式

1.JSONP

2.CORS

3.WebSocket

下面着重介绍第二种CORS方法:

1、创建类

package com.hzc.util;

 

import java.io.IOException;

import javax.servlet.FilterChain;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.filter.OncePerRequestFilter;

 

public class CrossFilter extends OncePerRequestFilter {

    @Override

    protected void doFilterInternal(HttpServletRequest request,

            HttpServletResponse response, FilterChain filterChain)

            throws ServletException, IOException {

        // if (request.getHeader("Access-Control-Request-Method") != null &&

        // "OPTIONS".equals(request.getMethod())) {

        // CORS "pre-flight" request

        response.addHeader("Access-Control-Allow-Origin", "*");

        response.addHeader("Access-Control-Allow-Methods",

                "GET, POST, PUT, DELETE");

        response.addHeader("Access-Control-Allow-Headers", "Content-Type");

        response.addHeader("Access-Control-Max-Age", "1800");// 30 min

        // }

        filterChain.doFilter(request, response);

    }

 

}

2、配置web.xml

<filter>

    <filter-name>cors</filter-name>

    <filter-class>com.hzc.util.CrossFilter</filter-class>

</filter>

<filter-mapping>

    <filter-name>cors</filter-name>

    <url-pattern>/*</url-pattern>

</filter-mapping>

此时,option请求被CrossFilter过滤器接入并赋予跨域响应头,同时也进入FrameworkServlet中的doOption方法。查看浏览器控制台,发现option请求返回支持跨域信息,后续的post请求进入controller。

这里介绍完了Spring MVC解决跨域请求所有内容Spring MVC采用CORS方法解决跨域请求的整个过程如上面所述,只有简单的两步。至于其他的两种方法在本站的Spring MVC视频教程中有详细的讲解,觉得有需要的小伙伴可以前去观看学习。

0人推荐
共同学习,写下你的评论
0条评论
携代码的男孩纸
程序员携代码的男孩纸

24篇文章贡献108038字

作者相关文章更多>

推荐相关文章更多>

DOM渲染的详细过程

QCode09-04 14:38

CSS水平和垂直居中技巧大梳理

Code大师09-04 14:50

mui的input框在IOS系统下无法聚焦或点击多次才能聚焦

不写代码你养我啊08-23 11:14

推荐的-视.频播放器以及在线客服

不写代码你养我啊09-17 18:02

谈谈java多线程的三大特性

要学习了06-18 18:13

发评论

举报

0/150

取消