解決“跨域問題”的幾種方法

(0)使用注解方式,這個可能有些框架可以,有些不行,在要訪問的方法前面加上此注解即可:

@CrossOrigin

(1)使用?Access-Control-Allow-Origin 設置請求響應頭,簡潔有效。

 (后臺)被請求的方法,設置請求響應頭:

response.setHeader("Access-Control-Allow-Origin","*"); //response 來自 HttpServletResponse

 (前端)前端js的ajax中,數據類型使用json,不能使用 “jsonp” //自己一開始就是寫成 jsonp,結果半天不起作用

dataType : "json",

 【當然最好的方法是寫一個過濾器,不要在每個被請求的方法里面都添加這句,如果寫過濾器的話,doFilter() 方法中參數 response 類型為 ServletResponse,需要強轉成?HttpServletResponse 類型,才可以設置 setHeader() 請求頭】

(2)使用 httpClient 做后臺中轉,避開前端跨域問題。

 1、創建 httpClient 工具類(可以直接復制使用,修改一下包名路徑即可)

package 自己包名路徑;import java.io.IOException;import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import com.alibaba.fastjson.JSONObject;public class HttpClientUtils {private static Logger logger = LoggerFactory.getLogger(HttpClientUtils.class); // 日志記錄private static RequestConfig requestConfig = null;static {// 設置請求和傳輸超時時間requestConfig = RequestConfig.custom().setSocketTimeout(2000).setConnectTimeout(2000).build();}/*** post請求傳輸json參數* * @param url*            url地址* @param json*            參數* @return*/public static JSONObject httpPost(String url, JSONObject jsonParam) {// post請求返回結果CloseableHttpClient httpClient = HttpClients.createDefault();JSONObject jsonResult = null;HttpPost httpPost = new HttpPost(url);// 設置請求和傳輸超時時間
        httpPost.setConfig(requestConfig);try {if (null != jsonParam) {// 解決中文亂碼問題StringEntity entity = new StringEntity(jsonParam.toString(), "utf-8");entity.setContentEncoding("UTF-8");entity.setContentType("application/json");httpPost.setEntity(entity);}CloseableHttpResponse result = httpClient.execute(httpPost);// 請求發送成功,并得到響應if (result.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {String str = "";try {// 讀取服務器返回過來的json字符串數據str = EntityUtils.toString(result.getEntity(), "utf-8");// 把json字符串轉換成json對象jsonResult = JSONObject.parseObject(str);} catch (Exception e) {logger.error("post請求提交失敗:" + url, e);}}} catch (IOException e) {logger.error("post請求提交失敗:" + url, e);} finally {httpPost.releaseConnection();}return jsonResult;}/*** post請求傳輸String參數 例如:name=Jack&sex=1&type=2* Content-type:application/x-www-form-urlencoded* * @param url*            url地址* @param strParam*            參數* @return*/public static JSONObject httpPost(String url, String strParam) {// post請求返回結果CloseableHttpClient httpClient = HttpClients.createDefault();JSONObject jsonResult = null;HttpPost httpPost = new HttpPost(url);httpPost.setConfig(requestConfig);try {if (null != strParam) {// 解決中文亂碼問題StringEntity entity = new StringEntity(strParam, "utf-8");entity.setContentEncoding("UTF-8");entity.setContentType("application/x-www-form-urlencoded");httpPost.setEntity(entity);}CloseableHttpResponse result = httpClient.execute(httpPost);// 請求發送成功,并得到響應if (result.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {String str = "";try {// 讀取服務器返回過來的json字符串數據str = EntityUtils.toString(result.getEntity(), "utf-8");// 把json字符串轉換成json對象jsonResult = JSONObject.parseObject(str);} catch (Exception e) {logger.error("post請求提交失敗:" + url, e);}}} catch (IOException e) {logger.error("post請求提交失敗:" + url, e);} finally {httpPost.releaseConnection();}return jsonResult;}/*** 發送get請求* * @param url*            路徑* @return*/public static JSONObject httpGet(String url) {// get請求返回結果JSONObject jsonResult = null;CloseableHttpClient client = HttpClients.createDefault();// 發送get請求HttpGet request = new HttpGet(url);request.setConfig(requestConfig);try {CloseableHttpResponse response = client.execute(request);// 請求發送成功,并得到響應if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {// 讀取服務器返回過來的json字符串數據HttpEntity entity = response.getEntity();String strResult = EntityUtils.toString(entity, "utf-8");// 把json字符串轉換成json對象jsonResult = JSONObject.parseObject(strResult);} else {logger.error("get請求提交失敗:" + url);}} catch (IOException e) {logger.error("get請求提交失敗:" + url, e);} finally {request.releaseConnection();}return jsonResult;}
}

?2、在A項目下新建中轉類,添加中轉方法(其實就是一個controller類,注意注解使用 @RestController ,使用 @Controller 會取不到數據)

package 自己包名路徑;import java.util.HashMap;
import java.util.Map;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import com.alibaba.fastjson.JSONObject;
import com.chang.util.HttpClientUtils;@RestController
public class Azhong {
   //中轉方法@RequestMapping(
"/forwardB")public Map<String,Object> forwardB() {System.out.println("進來A的中轉站了");JSONObject jb = HttpClientUtils.httpGet("要訪問的B項目的方法的路徑");

     //下面是自己具體的業務處理,這里只是demo測試Map
<String, Object> map = new HashMap<String, Object>();map.put("retCode", jb.get("retCode").toString());map.put("retMsg", jb.get("retMsg").toString());
return map;} }

?3、前端 ajax 的?url : "http://A項目路徑/forwardB", 數據類型 dataType : "json"?

url : "http://A項目路徑/forwardB", //訪問自己的中轉方法
dataType : json

?

轉載于:https://www.cnblogs.com/xuehuashanghe/p/9687066.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249458.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249458.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249458.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Conda 安裝本地包

有的conda或pipy源太慢&#xff0c;conda install xxx或者pip install xxx下載會中斷連接導致壓縮包下載不全&#xff0c;本地的安裝包沒法完全安裝, 遇到這個問題時&#xff0c;我們可以用p2p工具-迅雷等先下載指定包再用conda或pip安裝 pip 安裝本地包pip install D:\XXX.w…

DESUtils 加解密時 Given final block not properly padded bug小記

事情的經過是這個樣子的。。。。。。 先說說問題是怎么出現的。根據客戶需求&#xff0c;需要完成一個一鍵登錄的功能&#xff0c;于是我的項目中就誕生了DesUtil&#xff0c;但是經過上百次用戶測試&#xff0c;發現有一個用戶登錄就一直報錯&#xff01;難道又遇到神坑啦&am…

Apache

https://www.iteye.com/blog/yaodaqing-1596570

仿 騰訊新聞快訊 --無縫滾動

//無縫滾動function AutoScroll(obj) {var autoScrollTimernull,timernull;timersetTimeout(function(){move();},3000);function move(){clearTime(autoScrollTimer);var liLen $(obj).find(li).length;if(liLen 1){//此處處理只有一條數據時 跳動效果$(obj).find("ul:f…

spring3.2 @Scheduled注解 定時任務

1.首先加入 下載spring3.2 &#xff0c;http://projects.spring.io/spring-framework/ 2.加入jar包&#xff0c;在applicationContext.xml加入聲明-xmlns加入[java xmlns:task"http://www.springframework.org/schema/task" -xsi加入[java] http://www.springframe…

搜索(題目)

A.POJ_1321考查DFS的一個循環中遞歸調用 1 #include<iostream>2 #include<cstring>3 4 using namespace std;5 char a[10][10]; //記錄棋盤位置6 int book[10]; //記錄一列是否已經放過棋子7 int n, k; // k 為 需要放入的棋子數8 int t…

rest_framework中的url注冊器,分頁器,響應器

url注冊器&#xff1a; 對于authors表&#xff0c;有兩個url顯得麻煩&#xff1a; rest_framework將我們的url進行了處理&#xff1a; 這樣寫了之后&#xff0c;就可以像原來一樣訪問author表了。 故意寫錯路徑&#xff0c;看看它為我們做了哪些配置&#xff1a; 在有關author的…

Alluxio學習

介紹 Alluxio&#xff08;之前名為Tachyon&#xff09;是世界上第一個以內存為中心的虛擬的分布式存儲系統。它統一了數據訪問的方式&#xff0c;為上層計算框架和底層存儲系統構建了橋梁。應用只需要連接Alluxio即可訪問存儲在底層任意存儲系統中的數據。此外&#xff0c;Allu…

freemarker常見語法大全

FreeMarker的插值有如下兩種類型:1,通用插值${expr};2,數字格式化插值:#{expr}或#{expr;format} ${book.name?if_exists } //用于判斷如果存在,就輸出這個值 ${book.name?default(‘xxx’)}//默認值xxx ${book.name!"xxx"}//默認值xxx ${book.date?string(yyy…

網頁排版與布局

一 網站的層次結構 制作便于瀏覽頁面的一個大敵就是視覺干擾,它包含兩類: a,混亂頁面主次不清,所有東西都引人注目 b,背景干擾 1.把頁面分割成清晰明確的不同區域很重要,因為可以使用戶迅速判斷出哪些區域應重點看,哪些可以放心地忽略. 2.創建清晰直觀的頁面層次結構;越重要越要…

Bash的循環結構(for和while)

在bash有三中類型的循環結構表達方法&#xff1a;for&#xff0c;while&#xff0c;until。這里介紹常用的兩種&#xff1a;for和while。 for bash的for循環表達式和python的for循環表達式風格很像&#xff1a; for var in $(ls) doecho "$var"done 取值列表有很多種…

MVVM模式下實現拖拽

MVVM模式下實現拖拽 原文:MVVM模式下實現拖拽在文章開始之前先看一看效果圖 我們可以拖拽一個"游戲"給ListBox,并且ListBox也能接受拖拽過來的數據&#xff0c; 但是我們不能拖拽一個"游戲類型"給它。 所以當拖拽開始發生的時候我們必須添加一些限制條件&a…

nodejs變量

https://www.cnblogs.com/vipyoumay/p/5597992.html

jenkins+Docker持續化部署(筆記)

參考資料&#xff1a;https://www.cnblogs.com/leolztang/p/6934694.html &#xff08;Jenkins&#xff08;Docker容器內&#xff09;使用宿主機的docker命令&#xff09; https://container-solutions.com/running-docker-in-jenkins-in-docker/ &#xff08;Running Docker i…

正則表達式之括號

正則表達式&#xff08;三&#xff09; 括號 分組 量詞可以作用字符或者字符組后面作為限定出現次數&#xff0c;如果是限制多個字符出現次數或者限制一個表達式出現次數&#xff0c;需要使用括號()將多個字符或者表達式括起來&#xff0c;這樣便稱為分組。例如(ab)表示“ab”字…

免安裝Mysql在Mac中的神坑之Access denied for user 'root'@'localhost' (using password: YES)

眼看馬上夜深人靜了&#xff0c;研究了一天的問題也塵埃落定了。 廢話不多說 直接來干貨&#xff01; 大家都知道免安裝版本的Mysql, 在Mac中安裝完成&#xff08;如何安裝詳見Mac OS X 下 TAR.GZ 方式安裝 MySQL&#xff09;之后&#xff0c;在登錄時會遇到沒有訪問權限的問題…

nodejs函數

https://www.cnblogs.com/yourstars/p/6121262.html

[HNOI2009]夢幻布丁

題目描述 N個布丁擺成一行,進行M次操作.每次將某個顏色的布丁全部變成另一種顏色的,然后再詢問當前一共有多少段顏色.例如顏色分別為1,2,2,1的四個布丁一共有3段顏色. 第一行給出N,M表示布丁的個數和好友的操作次數. 第二行N個數A1,A2...An表示第i個布丁的顏色從第三行起有M行,…

用jquery實現html5的placeholder功能

版權聲明&#xff1a;本文為博主原創文章。未經博主同意不得轉載。 https://blog.csdn.net/QianShouYuZhiBo/article/details/28913501 html5的placeholder功能在表單中經經常使用到。它主要用來提示用戶輸入信息&#xff0c;當用戶點擊該輸入框之后&#xff0c;提示文字會自己…

mac環境下node.js和phonegap/cordova創建ios和android應用

mac環境下node.js和phonegap/cordova創建ios和android應用 一介布衣 2015-01-12 nodejs 6888 分享到&#xff1a;QQ空間新浪微博騰訊微博人人網微信引用百度百科的一段描述:PhoneGap是一個用基于HTML&#xff0c;CSS和JavaScript的&#xff0c;創建移動跨平臺移動應用程序的…