文章目录定义使用定义拦截器是Spring框架提供的核心功能之⼀, 主要用来拦截用户的请求, 在指定方法前后, 根据业务需要执行预先设定的代码.拦截器的使用步骤包括首先定义拦截器然后再注册配置拦截器定义拦截器的代码如下需要实现HandlerInterceptor接口并重写其所有方法Slf4jComponentpublicclassLoginInterceptorimplementsHandlerInterceptor{OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{log.info(LoginInterceptor ⽬标⽅法执⾏前执⾏..);returntrue;//true表示放行false表示拦截}OverridepublicvoidpostHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,ModelAndViewmodelAndView)throwsException{log.info(LoginInterceptor ⽬标⽅法执⾏后执⾏);}OverridepublicvoidafterCompletion(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,Exceptionex)throwsException{log.info(LoginInterceptor 视图渲染完毕后执⾏最后执⾏);}}注册配置拦截器实现WebMvcConfigurer接口并重写addInterceptors方法ConfigurationpublicclassWebConfigimplementsWebMvcConfigurer{//⾃定义的拦截器对象AutowiredprivateLoginInterceptorloginInterceptor;OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){//注册⾃定义拦截器对象registry.addInterceptor(loginInterceptor).addPathPatterns(/**);//设置拦截器拦截的请求路径此时的/**表⽰拦截所有请求}}一些常见的拦截路径配置如下拦截路径含义举例/*⼀级路径能匹配/user/book/login不能匹配 /user/login/**任意级路径能匹配/user/user/login/user/reg/book/*/book下的⼀级路径能匹配/book/addBook不能匹配/book/addBook/1/book/book/**/book下的任意级路径能匹配/book/book/addBook/book/addBook/2不能匹配/user/login使用http 状态码 401: Unauthorized中⽂解释为未经过认证指示身份验证是必需的没有提供身份验证或身份验证失败如果请求已经包含授权凭据那么401状态码表示不接受这些凭据Slf4jComponentpublicclassLoginInterceptorimplementsHandlerInterceptor{OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{HttpSessionsessionrequest.getSession(false);if(session!nullsession.getAttribute(Constants.SESSION_USER_KEY)!null){returntrue;}response.setStatus(401);returnfalse;}}需要使用 excludePathPatterns 排除一些路径比如登录路径否则访问登录页面时也会进行校验。同时所有的 html 前端排除掉还有 html 调用的一些 css、js文件等。ConfigurationpublicclassWebConfigimplementsWebMvcConfigurer{//⾃定义的拦截器对象AutowiredprivateLoginInterceptorloginInterceptor;OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){//注册⾃定义拦截器对象registry.addInterceptor(loginInterceptor).addPathPatterns(/**).excludePathPatterns(/user/login).excludePathPatterns(/**/**.html).excludePathPatterns(/css/**).excludePathPatterns(/js/**).excludePathPatterns(/pic/**);}}或者采用传递数组的方式进行ConfigurationpublicclassWebConfigimplementsWebMvcConfigurer{//⾃定义的拦截器对象AutowiredprivateLoginInterceptorloginInterceptor;privateListStringexcludePathsArrays.asList(/user/login,/**/**.html,/css/**,/js/**,/pic/**);OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){//注册⾃定义拦截器对象registry.addInterceptor(loginInterceptor).addPathPatterns(/**).excludePathPatterns(excludePaths);}}