[精讚] [會員登入]
1862

【Wicket】[Header]如何讀取來自客戶端地檔頭和傳送自訂擋頭至客戶端

當需要設定檔頭或是讀取來自客戶端的檔頭時,這些程式碼就很好用

分享此文連結 //n.sfs.tw/16201

分享連結 【Wicket】[Header]如何讀取來自客戶端地檔頭和傳送自訂擋頭至客戶端@小編過路君子
(文章歡迎轉載,務必尊重版權註明連結來源)
2023-10-20 13:44:41 最後編修
2023-06-07 17:05:58 By 過路君子
 

哈囉大家好,這裡是又被Wicket挖坑跳得小編過路君子

上次寫 Wicket 筆記是兩個月前,那時候是為了 Cookie 煩惱,而這次則是為了 Header 煩惱......

 

 

有時候總會在意想不到的地方發生錯誤,這次是在小編想要用 Wicket 來寫一個從伺服器下載檔案並分析的功能。

結果呢,就被瀏覽器擋住檔案下載的功能了,後來發現原因是因為 Header 的 Access-Control-Allow-Origin 屬性未設定,所以瀏覽器不允許由 Javascript 自行在背景下載的檔案

順帶一提,似乎由使用者發起的檔案下載請求不會因為 Access-Control-Allow-Origin 導致下載被瀏覽器封鎖(仍須進一步的測試)。

 

設定Header

所以現在問題就是要如何去設定 Header,僅需在繼承了 WebPage 的那個 class 內加入以下資訊即可:

import org.apache.wicket.request.http.WebResponse;

public class myPage extends WebPage
{
	@Override
	protected void setHeaders(WebResponse response)
	{
		// default
		response.setHeader("Date", "[now]");
		response.setHeader("Expires", "[0]");
		response.setHeader("Pragma", "no-cache");
		response.setHeader("Cache-Control", "no-cache");

		// customize
		String fullUrl = this.getRequestCycle().get().getUrlRenderer().renderFullUrl(this.getRequestCycle().get().getRequest().getUrl());

		response.setHeader("Access-Control-Allow-Origin", fullUrl.substring(0, fullUrl.indexOf('/', fullUrl.indexOf('/')+2)));
	}
}

因為 Wicket 會有一些預設的 Header 值,所以我們必須要手動加回去,詳細資訊可以參考這裡

順帶一提,上面網址抓取的寫法只能自適應 IPv4 而已,IPv6 會出問題。

而設定方式可以參考下圖或是原本的出處這裡:

(所有圖片點擊都可以放大、變高清)

 

讀取Header

僅需要兩行,即可讀出特定 Header 欄位的值:

import javax.servlet.http.HttpServletRequest;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.request.mapper.parameter.PageParameters;

public class myPage extends WebPage
{
	public api_v1_stellar_server(PageParameters pageParameters) 
	{
		HttpServletRequest request = ((HttpServletRequest) this.getRequest().getContainerRequest());
				
		String authorization = request.getHeader("Authorization");
	}
}

 

 

 

後記

就只有設定方式比較麻煩,讀取倒是還好。

END

你可能感興趣的文章

【Wicket】[Cookie]如何讀取和設定客戶端的Cookie 對於某些參數需要給予使用者,我們可以使用 Cookie 來讓客戶端記著,之後再跟伺服器裡的比對來達到驗證的目的

【!@#$%^&*()_+ language】!@#$%^&*()_+ 程式語言介紹 一款看起來像是在鬧的程式語言

【Wicket】[URI]使用Java取得目前網址 這是個還滿常用的功能,可惜 Wicket 沒有內建函式可以快速取得我們要的部分,只能依靠我們自己後期的字串剖析

【Discord bot 6.2.1】[JDA6](StringSelectMenu)如何從訊息中提取選單並取得使用者選擇的選項 從 JDA5 使用到現在的 JDA6,時間過得還真快

【Wildfly/jBoss】[Linux] 如何從無到有建立Wildfly網頁伺服器 包含一切所需的指令

【JDA/discord bot】刪除事件或slash(斜槓)指令的reply訊息 如何正確的等待 Async 的結束,在進行接下來的刪除訊息動作

隨機好文

【開箱】高捷少女collection總集篇1 由希萌創意寄來的大包裹!裡面究竟有什麼呢?小編就帶大家來看看!

高捷少女:地下城的探險少女③ 過了十分鐘後,前方的天花板滴下一滴水珠,發出「噠」一聲響亮地落在石地上,讓大家嚇一跳。     「什麼嘛,只是水珠而已。」艾米撫著胸口噓了一聲。     忽然間,耐耐的臉色發白起來。「各位,你們看

艾米莉亞和高捷戀旅3① 「既然艾米莉亞小姐也來了,就把那個拿出來吧。」美麗島捷運商店的負責人說完,一名工作人員推著一個大箱子進入辦公室。他將箱子打開,將裡面的東西抬出來。艾米張大嘴巴

【英翻中歌詞】(二創歌)Pure Furies ~ 心之所在 the time has come 時辰已到 after all that pain my thirst for ven

三民(乙) Book.4 Unit 4 單字和片語 給某個常常忘記帶單字本的小編…