2010-10-05 74 views
0

我得到了一個jsp,它導入了一個jsp文件。使用彈簧安全配置可以保護導入嗎?是否有可能通過spring-security來保護包含的jsp?

比如我想使用此行代碼:

<c:import url="jsp/admin/add_user.jsp" /> 

但是如果用戶沒有登錄的管理員不是因爲安全的原因,這應該導入無法工作。我擔保的管理文件夾這一行

<intercept-url pattern="/jsp/admin/**" access="hasRole('ROLE_ADMIN')" /> 

但是,當進口在沒有管理員權限的需要,如果用戶的登錄身份沒有管理員角色的用戶比它仍然有效JSP文件中ADD_USER JSP。如果沒有必要,我不希望在導入時使用標籤。

回答

4

Spring Security使用Servlet過濾器來確保用戶正在訪問的資源的安全機制。

當你輸入一個JSP,因爲資源沒有通過直通一個Servlet連接內部裝載的Servlet過濾器無法攔截的電話。

一個可能的解決方案是添加阻止進口安全資源的,如果用戶沒有生活必需品的憑據的JSP頁面中的邏輯。

我不是一個JSP的專家,但我不明白你怎麼可以添加必要的邏輯,而周圍的進口添加標籤。

1

您可以通過強制將請求強制到容器外部來實現此目的。例如

<c:import url="http://localhost/jsp/admin/add_user.jsp" /> 

但是我不會真的推薦這個。一個原因是,在許多容器中,如果從導入的url返回403,它將傳播到父頁面並返回整個頁面的403。

所以包裝在一些春天的安全標籤的進口可能是一個更好的路要走。

雖然我還認爲僅僅擁有兩個獨立的JSP - 一個用於管理用戶和一個非管理員用戶。如果將頁面分解爲組件,則幾乎不需要重複內容。

+0

由於這個工程。我確實希望整個頁面出現403錯誤,因爲這不應該發生在正常站點導航上。不幸的是,我沒有得到一個403,而是在我當前頁面中嵌套的登錄表單。 – 2010-10-13 13:32:47

1
<%@ taglib prefix="authz" 
    uri="http://www.springframework.org/security/tags"%> 

---- 

    <authz:authorize access="hasRole('campaign_read')"> 
     Manager login --- <%@include file="manager/create_viewer.jsp"%> 
    </authz:authorize> 
+0

使用上述彈簧安全標籤庫。 – Divang 2011-04-06 09:20:23

+1

mondev,你可以編輯你自己的答案。另外,請確保代碼使用四個空格的縮進進行正確標記。 – 2011-04-06 10:09:05

相關問題