2011-09-15 96 views
0

我想了解Struts2攔截器。所以請原諒,如果我的問題是愚蠢的。Struts2:攔截器可以處理未經授權的訪問嗎?

我猜攔截器是特定於動作類的(這意味着在調用特定動作類之前,它們會被調用)。

例如:

<action name="test" class="com.jranch.Test"> 
    <interceptor-ref name="GuiStack」/> 
    <result name="success">/secure.jsp</result> 
</action> 

我的問題是:假設其中一個網站的圖片必須防止未經授權的訪問情況(也就是說,如果用戶直接進入瀏覽器的URL,他們不應該被允許直到他們登錄才能看到圖片)。

我的看法是,如果它與Servlet過濾器有關,我可以通過將url-pattern標記放到/ *來檢查所有請求來編寫一個簡單的過濾器。 Struts2攔截器可以處理這個,因爲我猜它們是針對動作類的?

如果我錯了,請糾正我。

+0

操作屬於一個包,通常攔截器被分組爲一個攔截器堆棧,然後應用到一個包。如您所示,您都可以將攔截器應用於特定的操作。本書「struts2 in action」展示瞭如何實現基本的安全性,就像你要求的那樣,並解釋你需要理解它(這個解決方案几乎是umesh提供的)。由於我提到了一本書,如果您需要快速加速,那麼只需提及「Apache Struts 2 Web應用程序開發」即可。 – Quaternion

回答

1

以及史蒂芬告訴攔截器是不針對任何行動,他們其實是Struts2框架的核心 攔截器是一組可重用components.In它們被應用於請求處理週期從異常處理包括所有的情況下到角色處理。 當一個人爲特定的Action寫一個Interceptor時,它的用例非常簡單。

您談論的用例可以由Interceptor處理,其中對於特定資源的每個請求可以首先被攔截器攔截並且基於允許訪問的自定義標準,我們可以將請求轉發到調用堆棧或者可以拒絕該請求。

public String intercept (ActionInvocation invocation) throws Exception { 
    final ActionContext context = invocation.getInvocationContext(); 
    Map<String, Object> session = ActionContext.getContext().getSession(); 
    Object user = session.getAttribute (USER_HANDLE); 
    if (user == null) { 

       //Any processing 
       return "login"; //User is not logged in so ask him/her to login 
    } else { 
     return invocation.invoke(); //user is trusted one let her go ahead 
    } 
} 
1

攔截器並不一定專用於一個動作 - 實際上,在大多數情況下,它們被應用於許多動作或全局動作(非常類似於一個servlet過濾器)。

這個answer討論如何在Struts2應用程序中使用攔截器進行身份驗證。

+0

感謝Steven Benitez,但是那個鏈接完全幫助我,它是一個登錄攔截器,它是專門爲一個類編寫的,我的問題是如何直接輸入http:myserver/Testing/Img2.jpg來重定向Loggedout用戶。 – Pawan

+1

如果這是個問題,你應該在「我的問題是」之後把所有東西都拿出來放在問題中。 – Quaternion

+0

是的,請清楚解釋你在原始問題中提出的問題。該問題中的攔截器_does_展示瞭如何將未登錄的用戶重定向到登錄頁面,而不是向用戶顯示所請求的內容。 –