拦截器类要继承HandlerInterceptorAdapter父类,可以选择实现preHandle()方法{进入拦截器前要做的事},或者afterCompletion()方法{进入拦截器后要做的事}
拦截器测试类:
package com.yq.cn.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class MyInterceptor1 extends HandlerInterceptorAdapter{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
//进入时做的事情
System.out.println("进入时做的事情11111");
//调用下一个拦截器,如果没有,调用controller类
return super.preHandle(request, response, handler);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
//退出时做的事情
System.out.println("退出时做的事情1111111111");
super.afterCompletion(request, response, handler, ex);
}
}
2、在springMVC.xml中配置拦截器
<mvc:interceptors>
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/user/*" />
<mvc:mapping path="/index/*" />
<!--
<bean class="controller.testlongin.SecurityInterceptor" />
<bean class="controller.testlongin.SecurityInterceptor2" />
-->
<bean class="controller.testlongin.SecurityInterceptor3" />
</mvc:interceptor>
</mvc:interceptors>
处理ajax请求和处理普通请求
public class SecurityInterceptor3 extends HandlerInterceptorAdapter {
//处理前进行拦截
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
System.out.println("进入过滤器!");
Object login = request.getSession().getAttribute("userName");
if (null==login) {
boolean isAjax = "XMLHttpRequest".equals(request.getHeader("X-Requested-With"));
System.out.println(isAjax+"------------"+request.getHeader("X-Requested-With"));
// 如果是ajax请求
if (isAjax) {
String jsonObj = "{\"success\":false,\"cause\":\"NO_LOGIN\",\"msg\":\"页面已过期,请重新登录!\"}";
String contentType = "application/json;charset=utf-8";
response.setContentType(contentType);
PrintWriter out = response.getWriter();
out.print(jsonObj);
out.flush();
out.close();
} else {
//普通请求
String url = request.getContextPath()+"/security/tologin";
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
StringBuilder builder = new StringBuilder();
builder.append("<script type=\"text/javascript\" charset=\"UTF-8\">");
builder.append("alert(\"页面过期,请重新登录\");");
builder.append("window.top.location.href=\""+url +"\";");
builder.append("</script>");
out.print(builder.toString());
out.close();
}
return false;
}
return super.preHandle(request, response, handler);
}
}
jsp页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<div style="color:red">
${msg }
</div>
<form action="${pageContext.request.contextPath }/security/login" method="get">
用户名:<input type="text" name="userName" value=""><br/>
密 码:<input type="password" name="password" value=""><br/>
<input type="submit" value="登录"><br/>
</form>
</body>
</html>
测试: