SpringBoot - JSONP 跨域實現


瀏覽器跨域

跨域的說明可以看 跨域訪問

SpringBoot中跨域解決

import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.AbstractJsonpResponseBodyAdvice;

/**
 * 解決 jsonp 跨域,當請求參數中有callback參數,並前端 Ajax 請求方式為jsonp 時,
 * 返回數據格式: callback({})
 * <p>
 * Created by Demon-HY on 2018/4/30 0030.
 */
@ControllerAdvice(basePackages = "com.test.http")
public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice {


	public JsonpAdvice() {
		super("callback", "jsonp");
	}

    /**
     * 防止post請求時,callback="" 的情況
     * @param value
     * @return
     */
    @Override
    protected boolean isValidJsonpQueryParam(String value) {
        return !StringUtils.isNotEmpty(value) && super.isValidJsonpQueryParam(value);
    }
}

只需要創建上述類就可以實現jsonp跨域,不需要在Controller中再加入callback參數,上面的 basePackages 

是controller攔截器,需要按照自己的項目去配置,下面是測試代碼:

import com.test.util.ClientResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.Serializable;

@RestController
public class HelloHttpApi implements Serializable {

    @RequestMapping("jsonp")
    public ClientResult testJsonp() {
        return new ClientResult();
    }
}


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com