天天看點

Spring配置跨域請求

本文主要是Spring+SpringMVC+MyBatis/MyBatis Plus架構環境,包括SpringBoot同樣适用。

1.編寫攔截器

package com.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class CORSInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, 
                             Object handler) throws Exception {

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

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, 
                           Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, 
                                Object handler, Exception ex) throws Exception {

    }
}      

2.在spring-mvc.xml檔案配置攔截器

<mvc:interceptors>
           <mvc:interceptor>
            <mvc:mapping path="/**"/>
                <bean class="com.interceptor.CORSInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>      

3.編寫html代碼測試

<html>

<head>
    <meta charset="utf-8">
<script src="jquery-1.8.0.min.js"></script>
<script>
function test(){
var str="test";
$.ajax({
        url:"http://192.168.1.125:8080/test-web/user/getCookie",
        type:"POST",
        data : {"str":str},
        dataType : 'json',
        success:function(data){
            
            alert(data.returnMsg);
            
        },error:function(XMLHttpRequest, textStatus, errorThrown){
             alert(XMLHttpRequest.status);
            alert(XMLHttpRequest.readyState);
            alert(textStatus);
        }
    });
}
</script>
</head>
<body onload="test()">
</body>      

在沒有配置攔截器的情況下,會出現如下結果:

Spring配置跨域請求

配置了攔截器則會正常傳回對應的資訊。