1、拦截器接口三个方法
- preHandle目标方法执行之前
- postHandle目标方法执行完成之后,页面处理之前
- afterCompletion最终页面
2、登录的一个拦截功能添加
(1)创建一个登录拦截器
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info(request.getRequestURI());
HttpSession session = request.getSession();
Object user = session.getAttribute("user");
if (user == null || !(user instanceof User) || !StringUtils.hasText(((User)user).getUsername())){
//拦截需要登录
response.sendRedirect("/login");
session.setAttribute("msg","请重新登录");
return false;
}
//false是拦截
return true;
}
}
(2)把拦截器注册到Spring容器中
- 静态资源我们要注意不能拦截,所以使用excludePathPatterns排除拦截页面
addPathPatterns使用”/**”匹配所有路径
@Configuration
public class MyConfig {
@Bean
public WebMvcConfigurer getWebMvcConfigurer(){
WebMvcConfigurer webMvcConfigurer = new WebMvcConfigurer() {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/login")
.excludePathPatterns("/error")
.excludePathPatterns("/css/**")
.excludePathPatterns("/js/**")
.excludePathPatterns("/images/**")
.excludePathPatterns("/fonts/**");
}
};
return webMvcConfigurer;
}
}