我有一個JSF頁面contentEdit.xhtml,它接受一個請求參數「代碼」加載內容進行編輯和其他相關操作。爲了提供訪問控制,我創建了一個ContentAccessFilter過濾器,並將其應用於contentEdit.xhtml,以檢查當前用戶是否有權訪問由「代碼」標識的內容。 ContentAccessFilter的JSF對直接對象的訪問控制
片段:
boolean isAuthorized = false;
String userId = httpReq.getRemoteUser();
String code = httpReq.getParameter("code");
if (code != null && !code.isEmpty())
{
ContentDAO dao = ContentDAO.getInstance();
isAuthorized = dao.isContentAuthorized(code, userId);
}
if (!isAuthorized)
{
httpRes.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}
對於contentEdit.xhtml的第一個條目,過濾器正常工作的代碼參數的第一個條目中總是存在通過調用諸如/contentArea.xhtml?code=從一個錨的html標記cnn。但是,對contentEdit.xhtml進行後續操作時,代碼參數會丟失。例如,我有像這樣的按鈕。
<p:commandButton value="Download" action="#{contentView.downloadContent}"/>
<p:commandButton value="Publish" action="#{contentView.publishContent}"/>
點擊該按鈕將調用與contentEdit.xhtml相同的URL,而參數代碼不包含在請求URL中。這個缺少的參數在過濾器中失敗。
正在使用Servlet在這種情況下過濾一個正確的方式來實現訪問控制?如果是,當觸發一個commandButton時如何包含一個請求參數?
感謝您的幫助。我認爲會議方式應該是最適合我需要的。我的表單是一個多部分表單,它在使用f:param時引入了一些複雜性,因爲我使用的是servlet 2.5容器。 – lumion 2015-02-16 01:13:53