SpringBoot实践笔记之拦截器配置篇 应用场景
公司新项目中需要对未登录用户进行访问控制功能
使用依据对比过滤器和拦截器,最终选择拦截器。
原因1:拦截器采用AOP的方式,对系统中所有的处理器进行前后拦截,而过滤器通过函数回调,主要用于过滤不合法数据。
原因2:市面上大都采用拦截器做登录控制,资料比较成熟。
创建一个拦截器管理器InterceptorConfig实现自WebMvcConfigurer(代理商)
重写addInterceptors方法
private static final String[] CUSTOM_RESOURCE_LOCATIONS = new String[]{"/ui/**","/vue/**","/public/**"}; InterceptorRegistration interceptor = registry.addInterceptor(loginInterceptor); //首先拦截所有 interceptor.addPathPatterns("/**"); //排除登录页面 interceptor.excludePathPatterns("/user/login"); //排除静态资源(这里需要看参考资料,根据项目配置来) interceptor.excludePathPatterns(CUSTOM_RESOURCE_LOCATIONS); //排除错误页面(你可以去掉在拦截器里面下断点试试哈哈) interceptor.excludePathPatterns("/error");创建一个拦截器LoginInterceptor实现自HandlerInterceptor(商品)
重写preHandle、postHandle、afterCompletion方法.
/** * 处理请求前(返回true,放行) * @param request * @param response * @param handler * @return * @throws Exception */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return HandlerInterceptor.super.preHandle(request, response, handler); } /** * 处理请求后 * @param request * @param response * @param handler * @param modelAndView * @throws Exception */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { HandlerInterceptor.super.postHandle(request, response, handler, modelAndView); } /** * 响应后执行(DispatcherServlet进行视图的渲染之后) * @param request * @param response * @param handler * @param ex * @throws Exception */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { HandlerInterceptor.super.afterCompletion(request, response, handler, ex); }3.InterceptorConfig、LoginInterceptor添加@Component注入Spring容器.
4.测试代码
1.springboot拦截器的拦截与不拦截
https://www.cnblogs.com/cnsdhzzl/p/10931823.html
2.SpringBoot2 如何使得拦截器排除静态资源的请求
https://blog.csdn.net/java_pet/article/details/84785803