如果不用spring的话,系统的耦合会很大很大,后期肯定会出大问题。想个办法能不能在数据库方面做做文章。数据库可是有触发器的,唯一要解决的是是哪个用户做的操作。
要么就用日志,在action里记录。日志构造的成一个sql语句,定期执行。
以上是个人的小小建议,采纳要慎重!
第一点 感觉你用户的操作入库有点没用吧 这样会有大量的IO操作 并发访问你的数据库吃不消 你可以写个日志不就可以了么
第二点 这是个典型的 横切问题 用spring的aop解决最好不过 用你想的拦截器也可以实现 或者用spring发个事件也行 这个比较简单 而且耦合度基本为0
第三点 如果你不打算用spring 你可以写个父类 放所有action都继承这个父亲类 在父类中把公共部分提取出去 子类中只是取得用户名了 操作名了 这样不就省得你每个都去写了么
用
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 ctx = invocation.getInvocationContext();
-
- HttpServletRequest request = ServletActionContext.getRequest();
- String ip = request.getRemoteAddr();
- Map session = ctx.getSession();
-
- 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;
- }