2013-04-11 68 views
1

我在使用Struts2和Struts1的應用程序上工作。現在我想爲不同的操作實現身份驗證。我想用interceptor來檢查哪個namespaceaction屬於哪個。我用Struts2動作包裝了所有的Struts1動作。所以所有strut1動作都通過攔截器。Struts2/Struts1動作調用

<action name="contactsList" class="com.opensymphony.xwork2.ActionSupport"> 
    <result name="success">contactsList.do</result> 
</action> 

問題是,如果用戶在瀏覽器中輸入struts1-action,攔截器將不會被調用。

我的問題:來自瀏覽器的動作調用和通過Struts配置調用的動作調用之間是否存在差異?如果可能的話,是否有可能禁止瀏覽器的Struts1操作,但是從struts中允許它?

+2

禁用struts1並只使用struts2調度程序? – 2013-04-11 07:51:19

+0

你的意思是servlet-mapping? action * .do IonTichy 2013-04-11 08:47:52

+0

是的,還有servlet本身。然後用戶將只能通過struts2調度程序訪問內容。 – 2013-04-11 08:57:47

回答

0

你以爲錯了方向。 Struts2中有一個Struts1 plugin,它實際上包裝了Struts1的行爲。所以,代碼看起來像

<action name="contactsList" class="org.apache.struts2.s1.Struts1Action"> 
    <param name="className">com.mycompany.myapp.ContactsListAction</param> 
    <result>contactsList.jsp</result> 
</action> 

你的問題Struts2的返回結果,要麼重定向或發送到servlet即使你的行動無所作爲。您可以對瀏覽器執行任何操作,但Struts將接受請求,直到將其映射到負責響應瀏覽器請求的url。

+0

文檔中提到:「Struts 1插件目前僅用於允許您在Struts 2應用程序中運行Strust 1操作,它不允許您繼續在JSP中使用Struts 1標記庫。您的JSP必須轉換使用Struts 2標籤庫「。我無法更改struts1操作和jsps。我必須像他們一樣使用它們。 – IonTichy 2013-04-11 12:06:21

+0

沒錯,這是遷移的方式。你要麼做,要麼一起使用這兩個框架,但不是你所做的。 – 2013-04-11 12:08:54