Spring拦截器有两种:
- HandlerInterceptor
- MethodInterceptor
HandlerInterceptor
实现方式1:实现HandlerInterceptor接口,实现preHandle(),postHandle(),afterCompletion() 三个方法
实现方式2:HandlerInterceptorAdapter,重写preHandle(),postHandle(),afterCompletion() 三个方法
实现方式1如下:
package com.cssl.interceptor;
import org.apache.log4j.Logger;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.cssl.controller.UserController;
import com.cssl.utils.TokenUtil;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 拦截器
*/
public class TokenInterceptor implements HandlerInterceptor {
private Logger log = Logger.getLogger(UserController.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String token = request.getHeader("token");
log.info("token:" + token);
//如果已经登录,不拦截
if (null != token) {
//验证token是否正确
boolean result = TokenUtil.verify(token);
System.out.println("是否通过拦截器:"+result);
if (!result) {
return false;
}
return true;
}
//如果没有登录,则跳转到登录界面
else {
request.getRequestDispatcher("/pages/login.html").forward(request, response);
return false;
}
}
@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 {
}
}
springmvc.xml:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/user/login.do"/>
<mvc:exclude-mapping path="/css/*"/>
<mvc:exclude-mapping path="/images/*"/>
<mvc:exclude-mapping path="/js/*"/>
<mvc:exclude-mapping path="/pages/**"/>
<mvc:exclude-mapping path="/provider/exportExl"/>
<bean class="com.cssl.interceptor.TokenInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
↑↑↑↑↑↑
<mvc:mapping path=“/**”/>:拦截所有请求
<mvc:exclude-mapping path=“”/>:放开的请求
Interceptor拦截器是会拦截静态资源的 比如html js css image这类,jsp不是静态资源,不会拦截