package edu.fudan.eservice.common.struts;
import java.util.Date;
import java.util.Iterator;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.alibaba.fastjson.JSON;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
import edu.fudan.eservice.common.utils.CommonUtil;
@SuppressWarnings("serial")
public class LogInterceptor implements Interceptor {
private static Log log = LogFactory.getLog(LogInterceptor.class);
private int outing = 3;
private String excludes=null;
public void destroy() {
}
public void init() {
}
@SuppressWarnings("rawtypes")
public String intercept(ActionInvocation actionInvocation) throws Exception {
ActionContext ac = actionInvocation.getInvocationContext();
String reqstr=actionInvocation.getProxy().getNamespace()+"/"+actionInvocation.getProxy().getActionName();
//log.info(reqstr);
if(!CommonUtil.isEmpty(excludes))
{
String[] excs=excludes.split(",");
for(String exs:excs)
{
if(!CommonUtil.isEmpty(exs)&&reqstr.indexOf(exs)>=0)
return actionInvocation.invoke();
}
}
Map e = ac.getParameters();
StringBuffer params = new StringBuffer();
Iterator i = e.keySet().iterator();
for (; i.hasNext();) {
Object o = i.next();
String param = o.toString();
if (param.indexOf("dojo.") < 0) {
params = params.append(param + ":");
Object[] ps = (Object[]) e.get(param);
for (Object oi : ps) {
params.append(oi + ",");
}
params.append(";");
}
}
HttpServletRequest request = org.apache.struts2.ServletActionContext.getRequest();
String url = request.getRequestURI();
String remoteip = CommonUtil.getRemoteip();
String userid = (String) request.getSession().getAttribute("user");
String res = actionInvocation.invoke();
/*
* if((outing&2)==2) { DAO dao=null; try{ dao=DAOFactory.getDAO();
* GenericLog gl=new GenericLog();
* gl.setParam(params.toString()+"return:"+res);
* gl.setRemoteip(remoteip); gl.setUrl(url.toString());
* gl.setWorkid(userid); dao.save(gl); dao.commitTransaction();
* }catch(Exception ex) { if(dao!=null) dao.rollbackTransaction();
* //ex.printStackTrace(); log.error(ex); } }
*/
if ((outing & 1) == 1) {
log.info(new Date() + "\t" + url + "\t" + res + "\t" + remoteip + "\t" + userid + "\n" + params);
}
return res;
}
public int getOuting() {
return outing;
}
public void setOuting(int outing) {
this.outing = outing;
}
public String getExcludes() {
return excludes;
}
public void setExcludes(String excludes) {
this.excludes = excludes;
}
}