文章目录
一、编写一个拦截器实现HandlerInterceptor 接口
//登录检查
public class Logininterceptor implements HandlerInterceptor {
//目标方法执行前
@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;
}
//拦截住未登录,跳转登录页
response.sendRedirect("/");
session.setAttribute("msg","请先登录!");
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 {
}
}
执行顺序:preHandle->目标方法mainPage->postHandle->afterCompletion
二、将拦截器添加到容器中(实现WebMvcConfigurer的addInterceptors方法)
@Configuration
public class AdminWebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new Logininterceptor())
.addPathPatterns("/**") //静态资源也会拦截
.excludePathPatterns("/","/login","/css/**","/fonts/**","/images/**","/js/**");//放行
}
}
三、制定拦截规则
注意静态资源也会被拦截,要设置通过。
.addPathPatterns("/**") //静态资源也会拦截
.excludePathPatterns("/","/login","/css/**","/fonts/**","/images/**","/js/**");//放行