[精讚] [會員登入]
1825

【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

你可能感興趣的文章

【PaperMC】從 Waterfall 切換至 Velocity waterfall 已經停止支援,最後停留在支援 Minecraft 1.21.6,之後的 Minecraft 版本便不再支援

【Raspberry Pi/樹梅派】(gcc 10) 如何安裝 gcc & g++ 需要的時間非常久,不愧是gcc的編譯

【Stable Diffusion web UI】[AI 作畫](Linux)無 NVIDIA 顯卡之伺服器運行測試 凡事就是要試試看,才知道最後的結果

【Discord bot 2.0.1】(discord.ui.View)如何將舊機器人升級至目前最新版本 很多時候升級軟體是為了讓別人覺得你的程式很先進,但這次卻是因為要使用某個新功能

【C++】使用struct array和一維int array模擬二維int array 主要是因為用sort去排序int array的二維陣列小編懶得研究,於是就研究了一種維持一維陣列但是有二維陣列效果的程式,小編就廢~~

【Vim】解決貼上文字時出現過多空格的問題 換了新系統,有時候就算重裝軟體並且複製了設定檔也還是會出現非常奇怪的現象

隨機好文

【分享、整合串】什麼?!高捷少女竟然有二創小說!! 由時零宇宙大大在巴哈上面連載的二創高捷少女小說,就讓我們來看看,究竟在時零大大的巧手下,高捷少女們會擦出什麼樣的火花吧!

高捷少女:地下城的探險少女② 「等我一下喔,我好像有帶去漬的清潔噴霧。」婕兒翻翻飛揚,拿出噴霧劑給小穹,小穹趕緊對著汙漬噴了噴,紅茶漬果然乾淨了許多。「婕兒,謝謝妳。來,還妳。」小穹感謝地把噴霧還給她,卻發現婕兒盯著打開的飛揚,一

高捷少女:地下城的探險少女⑤ 小穹寫好後,耐耐看了一遍。「我想我應該辦得到。」她說完跪坐在地上,然後把古箏安放在大腿上,並將樂譜放在前面的地板。「要開始囉。」耐耐閉上眼睛,深呼吸一口氣,小穹等人在一旁看著她,心中暗自替她打氣。

高捷少女:美麗島的守護者④ 光之穹頂的某處垃圾桶底,一個四方形的機器持續發出聲音,機器的儀表板上顯示著「1:25:10」的字樣,外表被一層鞭炮所掩蓋。儀表板的數字每秒不斷減少,細微的嗶嗶聲也隨著數字的改變發出,但在熙來攘往的美麗

婕兒──她的青春② 艾米直搖頭。「我真不敢相信,小穹妳都二十幾歲了,為什麼能想出這種故事呀?」「婕兒也是二十幾歲啊,妳想想她現在是什麼樣子?」小穹不滿地指向火車的方向。