在springboot中要使用拦截器功能,方法如下:
1、写一个类实现HandlerInterceptor接口
HandlerInterceptor接口中有三个默认方法:
preHandle():在目标方法执行之前执行
postHandle():在目标方法执行之后执行
afterCompletion():在页面渲染之后执行
2、写拦截逻辑
如下:
public class LoginInterceptor implements HandlerInterceptor {
/**
*目标方法执行之前
* @param request
* @param response
* @param handler
* @return
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//登录检查逻辑
HttpSession session = request.getSession();
Object loginUser=session.getAttribute("loginUser");
if (loginUser != null) {
//放行
return true;
}
//拦截. 未登录,跳转到登录页
request.setAttribute("msg","未登录,请先登录");
request.getRequestDispatcher("/").forward(request,response);
return false;
}
3、配置拦截器
将拦截器注册到容器中:实现WebMvcConfigurer的addInterceptors()方法
参数registry的三个方法:
addInterceptor():想容器中添加一个Interceptor
addPathPatterns():添加需要拦截的路径
excludePathPatterns():添加不需要拦截的路径,可以是多个值
如下:
@Configuration
public class MyWebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/**") //所有请求都被拦截包括静态资源
.excludePathPatterns("/","/login","/css/**","/fonts/**","/images/**","/js/**"); //放行的请求
}
}