项目实战(1)-拦截器

引入

拦截器的基本作用是:

  • 屏蔽链接,防止直接通过链接访问
  • 对屏蔽的链接进行使用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());
    }
}
posted @ 2021-10-25 17:56  快乐的海盗  阅读(98)  评论(0编辑  收藏  举报