package com.hrms.interceptor;
import java.util.Date;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.StrutsStatics;
import org.springframework.stereotype.Component;
import com.hrms.model.Module;
import com.hrms.model.Syslog;
import com.hrms.service.IActionService;
import com.hrms.service.IModuleService;
import com.hrms.service.ISyslogService;
import com.hrms.service.IUserPermissionService;
import com.hrms.service.IUserService;
import com.hrms.model.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
@Component
public class SyslogInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = -5779828224710405013L;
private IUserPermissionService userPermissionService;
private IModuleService moduleService;
private ISyslogService syslogService;
private IActionService actionService;
private IUserService userService;
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
Syslog syslog = new Syslog();
ActionContext actionContext = actionInvocation.getInvocationContext();
HttpServletRequest request = (HttpServletRequest) actionContext.get(StrutsStatics.HTTP_REQUEST);
String accessIp = getIpAddr(request);
syslog.setAccessIp(accessIp);
StringBuffer url = request.getRequestURL();
int slash = url.lastIndexOf("/");
String linkUrl = url.substring(slash+1);
int point = linkUrl.lastIndexOf(".");
if (point>0) {
linkUrl = linkUrl.substring(0,point);
}
int bottomLine = linkUrl.lastIndexOf("_");
String result;
String userId;
String actionId = "1";
String actionStr = linkUrl.substring(linkUrl.lastIndexOf("_")+1);
if(actionStr.equals("add")) {
actionId = "2";
} else if (actionStr.equals("update")) {
actionId = "3";
}else if (actionStr.equals("delete")) {
actionId = "4";
}
if(linkUrl.equals("user_login")) {
syslog.setAction("登入");
result = actionInvocation.invoke();
userId = actionContext.getSession().get("userId").toString();
}else {
userId = actionContext.getSession().get("userId").toString();
if(linkUrl.equals("user_loginOut")) {
syslog.setAction("退出");
}else {
if (actionId != null && actionId.trim() != "") {
Action action = (Action) actionService.findById(Integer.valueOf(actionId));
if (action!=null) {
syslog.setAction(action.getAction());
}
}
}
result = actionInvocation.invoke();
}
if (bottomLine>0) {
linkUrl = linkUrl.substring(0,bottomLine);
}
if (userId != null && actionId != null && !actionId.equals("1")) {
syslog.setDate(new Date());
Module module = moduleService.getModuleByLinkUrl(linkUrl);
syslog.setModule(module);
if (result.equals("error")) {
syslog.setType("错误");
} else if((result.equals("input"))){
syslog.setType("警告");
} else {
syslog.setType("信息");
}
syslog.setUser(userService.findById(Integer.valueOf(userId)));
if (result.equals("success") || result.equals("error") || result.equals("input")) {
syslogService.save(syslog);
}
return result;
}
return "login";
}
public String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("X-Forwarded-For");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
public IModuleService getModuleService() {
return moduleService;
}
@Resource
public void setModuleService(IModuleService moduleService) {
this.moduleService = moduleService;
}
public IUserPermissionService getUserPermissionService() {
return userPermissionService;
}
@Resource
public void setUserPermissionService(IUserPermissionService userPermissionService) {
this.userPermissionService = userPermissionService;
}
public ISyslogService getSyslogService() {
return syslogService;
}
@Resource
public void setSyslogService(ISyslogService syslogService) {
this.syslogService = syslogService;
}
public IActionService getActionService() {
return actionService;
}
@Resource
public void setActionService(IActionService actionService) {
this.actionService = actionService;
}
public IUserService getUserService() {
return userService;
}
@Resource
public void setUserService(IUserService userService) {
this.userService = userService;
}
}