Struts2 攔截器
如果不用spring的話,系統的耦合會很大很大,后期肯定會出大問題。想個辦法能不能在數據庫方面做做文章。數據庫可是有觸發器的,唯一要解決的是是哪個用戶做的操作。要么就用日志,在action里記錄。日志構造的成一個sql語句,定期執行。
以上是個人的小小建議,采納要慎重!
52356 (中級程序員) 2009-12-16
第一點 感覺你用戶的操作入庫有點沒用吧 這樣會有大量的IO操作? 并發訪問你的數據庫吃不消? 你可以寫個日志不就可以了么
第二點? 這是個典型的 橫切問題 用spring的aop解決最好不過?? 用你想的攔截器也可以實現? 或者用spring發個事件也行 這個比較簡單 而且耦合度基本為0
第三點 如果你不打算用spring 你可以寫個父類 放所有action都繼承這個父親類? 在父類中把公共部分提取出去? 子類中只是取得用戶名了 操作名了? 這樣不就省得你每個都去寫了么
第二點? 這是個典型的 橫切問題 用spring的aop解決最好不過?? 用你想的攔截器也可以實現? 或者用spring發個事件也行 這個比較簡單 而且耦合度基本為0
第三點 如果你不打算用spring 你可以寫個父類 放所有action都繼承這個父親類? 在父類中把公共部分提取出去? 子類中只是取得用戶名了 操作名了? 這樣不就省得你每個都去寫了么
wocsok (資深程序員) 2009-12-16
用Struts2 攔截器,直接上代碼
- import?java.util.Date;??? ??
- import?java.util.Iterator;??? ??
- import?java.util.Map;??? ??
- ?? ??
- import?java.util.Set;??? ??
- ?? ??
- import?javax.servlet.http.HttpServletRequest;??? ??
- ?? ??
- import?org.apache.struts2.ServletActionContext;??? ??
- ?? ??
- import?com.chiyu.model.Admin;??? ??
- import?com.chiyu.model.Adminoperationlog;??? ??
- import?com.chiyu.service.IAdminOperationLogService;??? ??
- import?com.chiyu.service.IAdminService;??? ??
- import?com.opensymphony.xwork2.Action;??? ??
- import?com.opensymphony.xwork2.ActionContext;??? ??
- import?com.opensymphony.xwork2.ActionInvocation;??? ??
- import?com.opensymphony.xwork2.interceptor.AbstractInterceptor;??? ??
- ?? ??
- import?freemarker.template.utility.StringUtil;??? ??
- ?? ??
- public?class?LoggerInterceptor?extends?AbstractInterceptor?{??? ??
- ????private?IAdminOperationLogService?adminOperationLogService;??? ??
- ????private?IAdminService?adminService;??? ??
- ????private?static?final?long?serialVersionUID?=?1358600090729208361L;??? ??
- ?? ??
- ????@SuppressWarnings("unchecked")??? ??
- ????@Override?? ??
- ????public?String?intercept(ActionInvocation?invocation)?throws?Exception?{??? ??
- ????????System.out.println("日志攔截器已經開始啟動..");??? ??
- ????????String?actionName?=?invocation.getAction().getClass().toString();??? ??
- ????????invocation.invoke();??? ??
- ????????final?Map<String,?Object>?parameters?=?invocation??? ??
- ????????????????.getInvocationContext().getParameters();??? ??
- ????????boolean?result?=?invocation.getProxy().getExecuteResult();??? ??
- ????????String?method?=?invocation.getProxy().getMethod();??? ??
- ????????//?取得請求相關的ActionContext實例??? ??
- ????????ActionContext?ctx?=?invocation.getInvocationContext();??? ??
- ?? ??
- ????????HttpServletRequest?request?=?ServletActionContext.getRequest();??? ??
- ????????String?ip?=?request.getRemoteAddr();??? ??
- ????????Map?session?=?ctx.getSession();??? ??
- ????????//?取出名為user的session屬性??? ??
- ????????String?name?=?(String)?session.get(Admin.ADMIN_KEY);??? ??
- ????????Admin?admin?=?adminService.findAdminByAdminName(name);??? ??
- ????????System.out.println(admin);??? ??
- ????????if?(admin?!=?null)?{??? ??
- ????????????Adminoperationlog?adminLog?=?new?Adminoperationlog();??? ??
- ????????????adminLog.setAdminId(admin.getAdminId());??? ??
- ????????????adminLog.setAdminName(name);??? ??
- ????????????adminLog.setDealTime(new?java.sql.Date(System.currentTimeMillis()));??? ??
- ????????????adminLog.setOperationIp(ip);??? ??
- ????????????adminLog.setOperationSource(actionName?+?"---"?+?method?+?"---"?? ??
- ????????????????????+?parameters?+?"---"?+?result);??? ??
- ????????????adminOperationLogService.save(adminLog);??? ??
- ????????}??? ??
- ????????return?Action.SUCCESS;??? ??
- ????}??
posted on 2010-03-23 17:32 飛熊 閱讀(283) 評論(0) 編輯 收藏 所屬分類: struts2.0