SpringBoot使用攔截器
攔截器Interceptor
Spring MVC的攔截器(Interceptor)和Filter不同,但是也可以實現對請求進行預處理,后處理。先介紹它的使用,只需要兩步:
1、繼承HandlerInterceptor類實現攔截器
/**
* PC端登錄攔截
*/
@Component
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("進入LoginInterceptor攔截器---------------------------------------");
HttpSession session = request.getSession();
User userInfo = (User) session.getAttribute("userInfo");
if (userInfo == null){
// 重定向 登錄頁面 ?請求url
response.sendRedirect("/layuiAdminbl/login.html?url="+request.getRequestURL().toString());
return false;
}
//放行
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// System.out.println("后置方法執行..");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// System.out.println("完成方法執行..");
}
}
2、實現WebMvcConfigurer接口注冊自定義攔截器
實現攔截器后還需要將攔截器注冊到spring容器中,可以通過implements WebMvcConfigurer,覆蓋其addInterceptors(InterceptorRegistry registry)方法。記得把Bean注冊到Spring容器中,可以選擇@Component 或者 @Configuration。
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Resource
private LoginInterceptor loginInterceptor;
/**
* 注冊自定義攔截器
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
//可以多個攔截器
// InterceptorRegistration interceptorDemoRegistration = registry.addInterceptor(new InterceptorDemo());
//interceptorDemoRegistration.addPathPatterns("/..");
//interceptorDemoRegistration.addPathPatterns("/..");
InterceptorRegistration interceptorRegistration = registry.addInterceptor(loginInterceptor);
//可以設置多個路徑攔截
interceptorRegistration.addPathPatterns("/count");
// interceptorRegistration.addPathPatterns("/**"); //攔截全部
}
}
