2010-04-09 39 views
1

我正在使用Struts和Java。問題是我有一個頁面有一些結果。用戶可以點擊一個項目並編輯它。我想在編輯用戶之後能夠返回結果。後退不會中斷,但如果他提交表單進行更新,他將不得不點擊返回2次我認爲可能有問題。Java正在尋找引用者

我試過header("Referer")但這在Internet Explorer中不起作用。

我正試圖實施一個解決方案。有任何想法嗎?我的想法是保存網址並移動該網址的ID。當我想返回從ID獲取網址。將它存儲在會話中不是解決方案,因爲用戶可能已經打開了多個窗口。

+0

'HTTP_REFERER'是用戶定義的標題。這可能是正確的,但用戶可能已經改變了它。在Firefox中使用Refcontrol插件相當容易:https://addons.mozilla.org/en-US/firefox/addon/953 – Powerlord 2010-04-09 15:03:50

+0

您可以在編輯項目時從可用對象重建結果URI嗎? – Matt 2010-04-09 15:11:07

回答

2

最好的方法是將其作爲請求參數傳遞。在編輯鏈接或按鈕上,只需將當前URL作爲請求參數傳遞即可。這裏有一個鏈接的示例:

<a href="/login?from=${pageContext.request.requestURI}">edit</a> 

或者如果它是一個按鈕提交表單,然後而是將它作爲以相同的形式隱藏輸入值:

<input type="hidden" name="from" value="${pageContext.request.requestURI}"> 

在頁面編輯的形式,將其傳送到隨後的請求作爲形式的隱藏的輸入值:

<input type="hidden" name="from" value="${param.from}"> 

在操作方法中,只是重定向到URL菲尼什後興奮的行動。因爲我不做Struts,所以我不能給出詳細的Struts示例,但這裏是您如何使用「普通的香草」Servlet執行此操作,您必須能夠將其移植到Struts方法:

response.sendRedirect(request.getParameter("from")); 
+0

它似乎是好的...但是我害怕如果查詢字符串太大! – GorillaApe 2010-04-10 15:02:11

7

將URL作爲請求參數傳遞可能會產生安全問題。 Powerlord是正確的,用戶可以改變引用標頭。這將允許用戶訪問一個頁面,他們可以做任何事情。更嚴重的是,遵循請求參數中的URL後,攻擊者可以將用戶發送到攻擊者選擇的頁面,外觀上該頁面是您的應用推薦的頁面。所以來自BalusC的答案可以啓用跨站請求僞造。