當前位置:首頁 » 編程語言 » java允許跨域

java允許跨域

發布時間: 2022-09-19 02:03:11

1. ajax 跨域 請求 java怎麼寫

用的tomcat嗎?如果是tomcat7以上,直接在web.xml中添加允許跨域就可以了。

<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

2. 我的一個java請求,該如何設置別人就可以跨域訪問我的請求得到數據

一、通過jsonp跨域

在js中,我們直接用XMLHttpRequest請求不同域上的數據時,是不可以的。但是,在頁面上引入不同域上的js腳本文件卻是可以的,jsonp正是利用這個特性來實現的。

比如,有個a.html頁面,它裡面的代碼需要利用ajax獲取一個不同域上的json數據,假設這個json數據地址是http://example.com/data.php,那麼a.html中的代碼就可以這樣:

我們看到b頁面成功的收到了消息。

使用postMessage來跨域傳送數據還是比較直觀和方便的,但是缺點是IE6、IE7不支持,所以用不用還得根據實際需要來決定。

結語:

除了以上幾種方法外,還有flash、在伺服器上設置代理頁面等跨域方式,這里就不做介紹了。

以上四種方法,可以根據項目的實際情況來進行選擇應用,個人認為window.name的方法既不復雜,也能兼容到幾乎所有瀏覽器,這真是極好的一種跨域方法。

3. JAVA跨域問題

跨域問題一般都在後台程序解決,將自己的程序通過配置文件或者代碼將其允許跨域,
在有跨域安全的時候,所有前端post請求時,會發送一個與其請求名字一樣的OPTIONS

此請求沒有任何參數,此機制為post不知道是否有許可權請求介面,發送了一個探知請求,探知
請求確認後,允許訪問後調用正常Post介面。 不允許就會出現你現在的問題跨域異常。
萌新,java是開源的,比NET好多了,多看看底層

4. javahttpclient post請求 x-forwarded-for這個可以設置成其他ip么

目前,要為另一個項目提供介面,介面是用HTTP URL實現的,最初的想法是另一個項目用jQuery post進行請求。
但是,很可能另一個項目是部署在別的機器上,那麼就存在跨域問題,而jquery的post請求是不允許跨域的。
這時,就只能夠用HttpClient包進行請求了,同時由於請求的URL是HTTPS的,為了避免需要證書,所以用一個類繼承DefaultHttpClient類,忽略校驗過程。
寫一個SSLClient類,繼承至HttpClient。

5. java伺服器端怎麼設置ajax 的跨域請求頭

在服務端設置response.setHeader("Access-Control-Allow-Origin", "*");即可。
Access-Control-Allow-Origin:* 表示允許任何域名跨域訪問
如果需要指定某域名才允許跨域訪問,只需把Access-Control-Allow-Origin:*改為Access-Control-Allow-Origin:允許的域名

例如:response.setHeader("Access-Control-Allow-Origin", "http://www.client.com");

6. 如何讓伺服器支持跨域

要看伺服器類型,如果伺服器是apache
(1)修改http服務的配置文件:C:\wamp\bin\apache\Apache2.4.4\conf\httpd.conf
把LoadMole headers_mole moles/mod_headers.so 前面的注釋刪除.
(2)添加Header set Access-Control-Allow-Origin *
<Directory />
AllowOverride none
Require all granted
Header set Access-Control-Allow-Origin *
</Directory>
(3)重啟http服務
如果是tomcat,比如spring MVC項目
創建一個過濾器,代碼如下:
Java代碼 收藏代碼
package com.web.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import com.common.dict.Constant2;
import oa.service.DictionaryParam;
public class SimpleCORSFilter implements Filter{
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", DictionaryParam.get(Constant2.DICTIONARY_GROUP_GLOBAL_SETTING, "AccessControlAllowOrigin"));
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
chain.doFilter(req, res);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
關鍵代碼:response.setHeader("Access-Control-Allow-Origin", "*");
<filter>
<filter-name>cors</filter-name>
<filter-class>com.web.filter.SimpleCORSFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cors</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
這樣伺服器就支持ajax的跨域訪問了.

7. java為什麼會有跨域問題

前言

相信大家在寫前端腳本的時候經常會遇到發送數據到後台的情況,但是由於瀏覽器的限制,不同域名之間的數據是不能互相訪問的,那前端怎麼和後端如何進行數據之間的交換呢?

JavaScript由於安全性方面的考慮,不允許頁面跨域調用其他頁面的對象,那麼問題來了,什麼是跨域問題?

答:這是由於瀏覽器同源策略的限制,現在所有支持JavaScript的瀏覽器都使用了這個策略。那麼什麼是同源呢?所謂的同源是指三個方面「相同」:

  • 域名相同

  • 協議相同

  • 埠相同

  • 下面就舉幾個例子來幫助更好的理解同源策略。

    URL

    說明

    是否允許通信

    http://www.a.com/a.js
    http://www.a.com/b.js 同一域名 允許

    http://www.a.com/a.js
    http://www.b.com/a.js 不同域名 不允許

    http://www.a.com:8000/a.js
    http://www.a.com/b.js 同一域名不同埠 不允許

    https://www.a.com/a.js
    http://www.a.com/b.js 同一域名不同協議 不允許

    在JAVA中處理跨域問題,通常有以下兩種常用的解決方法。

    第一種解決方法

    後台代碼在被請求的Servlet中添加Header設置:

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

  • PrintWriter out =null;

  • try

  • {

  • out = response.getWriter();

  • } catch (IOException e)

  • {

  • // TODO Auto-generated catch block

  • e.printStackTrace();

  • }

  • out.print("{'status':'ok'}");

  • out.flush();

  • out.close();

  • Access-Control-Allow-Origin這個Header在W3C標准里用來檢查該跨域請求是否可以被通過,如果值為*則表明當前頁面可以跨域訪問。默認的情況下是不允許的。

    在前端JS中需要向Servlet發出請求,請求代碼如下所示:

  • $.ajax({

  • url: "your url",

  • type:"get or post",

  • dataType:"json",

  • data:{

  • ....

  • },

  • success:function(data){

  • ...

  • }

  • 第二種解決方法

    通過jsonp跨域請求的方式。JSONP和JSON雖然只有一個字母的區別,但是他們完全就是兩回事,很多人很容易把他們搞混。JSON是一種數據交換的格式,而JSONP則是一種非官方跨域數據交互協議。

    首先來說一下前端JS是怎麼發送請求。代碼如下所示:

  • $.ajax({

  • url:"your url",

  • type:"get or post",

  • async:false,

  • dataType : "jsonp",

  • //服務端用於接收callback調用的function名的參數

  • jsonp:"callbackparam",

  • //callback的function名稱

  • jsonpCallback:"success_jsonpCallback",

  • success:function(data){

  • console.log(data);

  • },

  • error:function(data){

  • console.log(data);

  • }

  • });

  • 這里的callbackparam和success_jsonpCallback可以理解為發送的data數據的鍵值對,可以自定義,但是callbackparam需要和後台約定好參數名稱,因為後台需要獲取到這個參數裡面的值(即success_jsonpCallback)。

    下面,最重要的來了,後台怎麼樣獲取和返回數據呢。代碼如下所示:

  • PrintWriter out =null;

  • String callback=req.getParameter("callbackparam");

  • String json=callback+"({'status':'ok'})";

  • try

  • {

  • out = resp.getWriter();

  • } catch (IOException e)

  • {

  • // TODO Auto-generated catch block

  • e.printStackTrace();

  • }

  • out.print(json);

  • out.flush();

  • out.close();

  • 首先需要獲取參數名為callbackparam的值,這里獲取到的值就是「success_jsonpCallback」。然後將這個值加上一對小括弧。小括弧里放入你需要返回的數據內容,比如這里我返回一個JSON對象。當然你也可以返回其他對象,比如只返回一個字元串類型數據也可以。最後前端JS返回的數據就是這樣的:

  • success_jsonpCallback({'status':'ok'})

  • 瀏覽器會自動解析為json對象,這時候你只需要在success回調函數中直接用data.status就可以了。

8. 如何把java api做成跨域的

跨域要點jsoup協議,該協議的一個要點就是允許用戶傳遞一個callback參數給服務端,然後服務端返回數據時會將這個callback參數作為函數名來包裹住 JSON數據,這樣客戶端就可以隨意定製自己的函數來自動處理返回數據了。
所以需要前台傳一個callback參數,該參數是客戶端的一個方法,服務端收到callback參數以後,封裝callback對應方法需要的參數,返回給客戶端,即可實現跨域訪問。

9. 如何在java應用中跨域共享session,比如希

首先一點,你要明白session的大部分實現都是通過cookie的,所以跨域session是不可能的。
但跨域的認證還是可以有OAuth等實現方法,但不太推薦OAuth項目貌似爛尾了,隨然大家都在用。

其次雖然跨域有點難,但放在同一域下的不同項目是可以共享session的,CAS也不算復雜,你可以上github搜一下redis-session這個項目,只有一個源代碼文件,它給出了redis下session的一種nodejs實現,就是設置redis的超時來模擬session的超時。

再次,跨域也是可以的,就是使用iframe,在登錄時,在多個域下同時寫cookie,注意瀏覽器差異。

綜上,你的想法完全可行。

熱點內容
ftp保存密碼是灰色 發布:2025-01-11 14:00:07 瀏覽:260
壓縮文件最好 發布:2025-01-11 13:59:58 瀏覽:648
有幾家java培訓機構 發布:2025-01-11 13:55:05 瀏覽:475
搭建個人伺服器缺點 發布:2025-01-11 13:54:13 瀏覽:375
怎麼用安卓的手機登錄ios第五人格 發布:2025-01-11 13:44:11 瀏覽:768
登陸Ftp重輸密碼 發布:2025-01-11 13:40:12 瀏覽:334
解壓神器有氧射擊 發布:2025-01-11 13:33:04 瀏覽:853
百度雲的好友在哪個文件夾 發布:2025-01-11 13:32:13 瀏覽:749
2級c語言試題 發布:2025-01-11 13:09:21 瀏覽:941
rft屏幕代碼編譯 發布:2025-01-11 12:54:01 瀏覽:745