拦截器的基本作用是:
- 屏蔽链接,防止直接通过链接访问
- 对屏蔽的链接进行使用HandlerInterceptor拦截器处理
WebMvcConfigurer、InterceptorRegistry、HandlerInterceptor
preHandle、postHandle、afterCompletion
拦截器,首先实现拦截:
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Autowired
LoginTicketInterceptor loginTicketInterceptor;//要注册的拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
//注册拦截器、排除、添加
registry.addInterceptor(loginTicketInterceptor)
.excludePathPatterns("/**/*.css", "/**/*.js", "/**/*.png", "/**/*.jpg", "/**/*.jpeg")
.addPathPatterns("/register", "/login");
}
}
拦截器,其次是拦截之后干嘛
@Component
public class LoginTicketInterceptor implements HandlerInterceptor {
private static final Logger logger= LoggerFactory.getLogger(AlphaInterceptor.class);
//调用前拦截
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
...//业务逻辑,以登录为例
//调用方法前,判断/查找登陆凭证,将用户存储到hostHolder中。
logger.debug("preHandle:"+handler.toString());
return true;
}
//Controller之后,return返回html之前执行
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
...//业务逻辑
//用户已登录,就同时向前端返回当前登录用户,前端就可以根据用户是否已登陆,进行相应的判断,显示对应的功能
logger.debug("postHandle:"+handler.toString());
}
//返回html之后之执行
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
...//业务逻辑
//调用结束,清除用户信息
logger.debug("afterCompletion:"+handler.toString());
}
}