1、ApplicationContext-mvc.xml中加入自定义拦截器
<!--自定义的拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<!--path 是/api/get也可以/api/get/* 这样就拦截了前缀是/api/get的Controller-->
<mvc:mapping path="/**"/>
<!-- 定义在mvc:interceptor下面的表示是对特定的请求才进行拦截的 -->
<bean class="com.msunsoft.bph_sp.auditlog.listener.AuditLogInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
2、拦截器类
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.msunsoft.bph_sp.auditlog.bean.AuditLogRecord;
import com.msunsoft.bph_sp.auditlog.service.AuditLogRecordService;
import com.msunsoft.loginandlogout.entity.BdOrganizeEmployee;
public class AuditLogInterceptor implements HandlerInterceptor {
private static final String TAG = AuditLogInterceptor.class.getSimpleName();
@Autowired
private xx xx;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
// 从 HTTP 头中取得 Referer 值
// String YuMing = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
// + request.getContextPath() + "/";
System.out.println("getScheme:" + request.getScheme());
// System.out.println("getContextPath:"+request.getContextPath());
// System.out.println("getServerPort:"+request.getServerPort());
System.out.println("getServerName:" + request.getServerName());
String referer = request.getHeader("Referer");
// 判断 Referer 是否以 bank.example 开头
// startWith(referer, YuMing);
if (referer != null && !referer.trim().contains("login.action")) {
if (!(referer.trim().contains(request.getServerName()))) {
request.getRequestDispatcher("error.jsp").forward(request, response);
return false;
}
}
HttpSession session = request.getSession();
if (session != null) {
if (session.getAttribute("userObject") != null) {
xx userObject = (xx) session
.getAttribute("xx");
AuditLogRecord auditLogRecord = new AuditLogRecord();
auditLogRecord.setId(UUID.randomUUID().toString().replace("-", ""));
auditLogRecord.setUserName(userObject.getUserName());
auditLogRecord.setOrgCode(userObject.getGbcode());
auditLogRecord.setName(userObject.getName());
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
auditLogRecord.setExecutionTime(sf.format(new Date()));
auditLogRecord.setExecutionMethod(request.getServletPath());
auditLogRecord.setExecutionResult(String.valueOf(response.getStatus()));
auditLogRecordService.insertAuditLogRecord(auditLogRecord);
}
}
Enumeration<String> names = request.getParameterNames();
while (names.hasMoreElements()) {
String name = names.nextElement();
String[] values = request.getParameterValues(name);
for (String value : values) {
value = clearXss(value);
}
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response,
Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex) throws Exception {
}
private boolean startWith(String referer, String YuMing) {
if (referer != null) {
if (referer.trim().startsWith(YuMing)) {
return true;
} else {
return false;
}
}
return false;
}
/**
* 处理字符转义
*
* @param value
* @return
*/
private String clearXss(String value) {
if (value == null || "".equals(value)) {
return value;
}
value = value.replaceAll("<", "<").replaceAll(">", ">");
value = value.replaceAll("\\(", "(").replace("\\)", ")");
value = value.replaceAll("'", "'");
value = value.replaceAll("eval\\((.*)\\)", "");
value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");
value = value.replace("script", "");
return value;
}
}