實現思想:
1. 寫一個接受用戶請求的action,繼承DispatchAction,然後這個action裡面處理各種業務需求,比如說add,delete等等,在各個方法上添加注解,然後在調用這個action的方法時檢查有沒有注解。
2. 關鍵是要弄明白是誰調的action?查看有沒有注解的代碼怎麼寫?寫在哪?
3. 首先要弄明白struts1的流程,用戶請求提交給ActionServlet之後,ActionServlet調用requestProcessor這個請求處理器,請求處理器根據你請求的地址,實例化Action對象,然後拿Action各個方法的數據,最後調Action的方法。
4. 現在就斷點調試來看看是請求處理器的哪個方法調了action,哪個調了就重寫哪個,斷點段在ActionServlet的dopost方法上,發現是processActionPerform調用的action,那就准備重寫吧!
5. 寫一個自己的請求處理器MyRequestProcessor,繼承RequestProcessor,然後override他的processActionPerform方法。當然要記得在xml文件中配置controller標簽,指定用自己的請求處理器。
6. 在MyRequestProcessor中,首先要判斷調用的是action的哪個方法,怎麼得到這個方法呢?用反射!
一般action有三種方式:第一,直接繼承Action的action,那麼方法名就是“execute”;第二,繼承DispatchAction的action,那麼方法名就是request域中對應的mapping中的parameter;第三,繼承MappingDispatchAction的action,那麼方法名就是mapping中的parameter,通過反射得到調用action的哪個方法。
7. 然後判斷調用的方法上面有沒有注解,也就是調用這個方法需不需要權限,不需要,調用超類的processActionPerform;需要的話,檢查用戶的權限是否contains這個權限,是就放行,不是不放行!
代碼就不寫了,有了思想就有了代碼!