Struts2 攔截器
如果不用spring的話,系統(tǒng)的耦合會(huì)很大很大,后期肯定會(huì)出大問(wèn)題。想個(gè)辦法能不能在數(shù)據(jù)庫(kù)方面做做文章。數(shù)據(jù)庫(kù)可是有觸發(fā)器的,唯一要解決的是是哪個(gè)用戶做的操作。要么就用日志,在action里記錄。日志構(gòu)造的成一個(gè)sql語(yǔ)句,定期執(zhí)行。
以上是個(gè)人的小小建議,采納要慎重!
52356 (中級(jí)程序員) 2009-12-16
第一點(diǎn) 感覺(jué)你用戶的操作入庫(kù)有點(diǎn)沒(méi)用吧 這樣會(huì)有大量的IO操作? 并發(fā)訪問(wèn)你的數(shù)據(jù)庫(kù)吃不消? 你可以寫(xiě)個(gè)日志不就可以了么
第二點(diǎn)? 這是個(gè)典型的 橫切問(wèn)題 用spring的aop解決最好不過(guò)?? 用你想的攔截器也可以實(shí)現(xiàn)? 或者用spring發(fā)個(gè)事件也行 這個(gè)比較簡(jiǎn)單 而且耦合度基本為0
第三點(diǎn) 如果你不打算用spring 你可以寫(xiě)個(gè)父類(lèi) 放所有action都繼承這個(gè)父親類(lèi)? 在父類(lèi)中把公共部分提取出去? 子類(lèi)中只是取得用戶名了 操作名了? 這樣不就省得你每個(gè)都去寫(xiě)了么
第二點(diǎn)? 這是個(gè)典型的 橫切問(wèn)題 用spring的aop解決最好不過(guò)?? 用你想的攔截器也可以實(shí)現(xiàn)? 或者用spring發(fā)個(gè)事件也行 這個(gè)比較簡(jiǎn)單 而且耦合度基本為0
第三點(diǎn) 如果你不打算用spring 你可以寫(xiě)個(gè)父類(lèi) 放所有action都繼承這個(gè)父親類(lèi)? 在父類(lèi)中把公共部分提取出去? 子類(lèi)中只是取得用戶名了 操作名了? 這樣不就省得你每個(gè)都去寫(xiě)了么
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("日志攔截器已經(jīng)開(kāi)始啟動(dòng)..");??? ??
- ????????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();??? ??
- ????????//?取得請(qǐng)求相關(guān)的ActionContext實(shí)例??? ??
- ????????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) 評(píng)論(0) 編輯 收藏 所屬分類(lèi): struts2.0