1、类定义为Component组件(也可以不配置,定义为组件,后面用可以在容器里面取,不定义则直接new,第2步有说明),实现HandlerInterceptor 接口
@Component
public class CompanyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
String url = request.getRequestURI();
String contextPath = request.getContextPath();
url = url.replace(contextPath,"");
//管理"/byCompany/"路径和主页路径的请求
if(((url.contains("/byCompany/")&&!url.contains("/byCompany/selectCompany"))||url.equals("/")||url.startsWith("/index"))&& session.getAttribute("company_id")==null){
response.sendRedirect(contextPath+"/byCompany/selectCompany");
}
return HandlerInterceptor.super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
2、定义配置类,将拦截器放到spring容器中
@Component
@AllArgsConstructor
public class InterceptorConfig implements WebMvcConfigurer {
private CompanyInterceptor companyInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
//如果CompanyInterceptor不定义为组件,那么直接new一个即可,就不需要注入
//registry.addInterceptor(new CompanyInterceptor()));
registry.addInterceptor(companyInterceptor)
.addPathPatterns("/**")//拦截的路径,/**是拦截所有资源
.excludePathPatterns("/","/login","/css/**","/js/**","/images/**","/fonts/**");//不拦截的路径
WebMvcConfigurer.super.addInterceptors(registry);
}
}