今天做項目時,使用攔截器對使用者權限檢查。攔截器本身沒有問題,可是實現許可權攔截,但是傳遞的參數全部都無效了。搞了很久,由於對攔截器的內部機制不是特別熟悉,所以重新研讀了一下Struts2的攔截器。找到了原因:給一個Acton配置一個自訂攔截器後,此action就無法使用架構預設的攔截器棧了,這就導致前後台資料轉送無效。
解決方案一般有兩種:
一、顯示的使用預設攔截器
<action name="enterSystem_*" class="enterSystemManager" method="{1}"> <!-- 使用攔截器:進行許可權檢查 --> <interceptor-ref name="defaultStack" /> <interceptor-ref name="autority" /> <result name="workerMangerUI">/WEB-INF/page/backstage/system/workerManager.jsp</result> <result name="positionMangerUI">/WEB-INF/page/backstage/system/positionManager.jsp</result> </action>
二、使用<interceptor-ref name="params" />讓參數先傳遞
<action name="enterSystem_*" class="enterSystemManager" method="{1}"> <!-- 使用攔截器:進行許可權檢查 --> <interceptor-ref name="params" /> <interceptor-ref name="autority" /> <result name="workerMangerUI">/WEB-INF/page/backstage/system/workerManager.jsp</result> <result name="positionMangerUI">/WEB-INF/page/backstage/system/positionManager.jsp</result> </action>