Spring Web MVC拦截器:主要对处理器进行预处理和后处理。
常用场景:
日志记录,权限检查,性能监控,通用行为
Spring Web MVC拦截器实现方法:
Spring Web MVC 拦截器需要重写HandlerInterceptor接口中的三个方法。
preHandle(HttpServletRequest request,HTTPServletResponse response,Object handle) :该方法在请求处理之前进行调用。
postHandle(HttpServletRequest request,HTTPServletResponse response,Object handle,ModelAndView modelAndView):该方法在当前请求进行处理之后,在DispatherServlet进行视图返回渲染之前进行调用。
afterCompletion (HttpServletRequest request,HTTPServletResponse response,Object handle, Exception ex) :该方法在整个请求结束之后,也就是在DispatherServlet渲染了视图之后执行,主要用于进行资源清理。
环境: MacOS + IntelliJ IDEA 2019.3.1 (Ultimate Edition)
基于Spring实战 - 整合Spring MVC,设置SpringMVC 拦截器
1、在web 文件夹下创建interceptor文件夹
选择web文件夹->右键
->Package
->interceptor
2、interceptor创建登录拦截器LoginInterceptor
package com.codeonline.cats.web.interceptor;
import com.codeonline.cats.entity.User;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
/**
* @author 码出高薪
* @Desc. 登录拦截
* @date 2020/1/14 14:46
*/
public class LoginInterceptor implements HandlerInterceptor {
private static final Logger logger = LoggerFactory.getLogger(LoginInterceptor.class);
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
/**
* 从会话中登录记录信息
*/
User user = (User)request.getSession().getAttribute("user");
// 未登录 跳转到登录页面
if(user==null){
logger.info("未登录 跳转到登录页面");
response.sendRedirect("/login");
return false;
}else {
// 已登录 则放行 跳转到主页
logger.info("已登录 则放行 跳转到主页");
return true;
}
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex) throws Exception {
}
}
3、在spring-mvc中配置spring web mvc拦截器
<!-- 配置拦截器 使用登录拦截器拦截所有路径-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/login"/>
<mvc:exclude-mapping path="/static/**"/>
<bean class="com.codeonline.cats.web.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
4、运行项目,在浏览器中打开http://localhost:8080/
2020-01-14 15:40:57,225 INFO [com.codeonline.cats.web.interceptor.LoginInterceptor] - 未登录 跳转到登录页面