淘宝网做宝贝详情用哪个网站,网页美工设计是什么,博罗网站建设哪家好,如何做一个导航网站拦截器#xff08;Interceptor#xff09; 概念#xff1a;是一种动态拦截方法调用的机制#xff0c;类似于过滤器。Spring框架中提供的#xff0c;用来动态拦截控制器方法的执行。 作用#xff1a;拦截请求#xff0c;在指定的方法调用前后#xff0c;根据业务需要执行…拦截器Interceptor 概念是一种动态拦截方法调用的机制类似于过滤器。Spring框架中提供的用来动态拦截控制器方法的执行。 作用拦截请求在指定的方法调用前后根据业务需要执行预先设定的代码。 快速入门
定义拦截器 实现HandlerInterceptor接口并重写其所有方法。 Component
public class LoginInterceptor implements HandlerInterceptor {Override //目标方法执行前的执行返回true放行返回false不放行public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {return HandlerInterceptor.super.preHandle(request, response, handler);}Override //目标方法执行后执行public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);}Override //视图渲染执行后执行最后执行public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {HandlerInterceptor.super.afterCompletion(request, response, handler, ex);}
}
注册拦截器
Configuration
public class WebConfig implements WebMvcConfigurer {AutowiredLoginInterceptor loginInterceptor;Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginInterceptor).addPathPatterns(/**);}
}
拦截器-拦截路径 拦截路径 含义 举例 /* 一级路径 能匹配/depts/emps/login不能匹配 /depts/1 /** 任意级路径 能匹配/depts/depts/1/depts/1/2 /depts/* /depts下的一级路径 能匹配/depts/1不能匹配/depts/1/2/depts /depts/** /depts下的任意级路径 能匹配/depts/depts/1/depts/1/2不能匹配/emps/1
拦截器-执行流程 Filter与Interceptor区别 接口规范不同过滤器需要实现Filter接口而拦截器需要实现HandlerInterceptor接口。拦截范围不同过滤器Filter会拦截所有的资源而Interceptor只会拦截Spring环境中的资源。 登录验证 获取请求url。 判断请求url中是否包含login如果包含说明是登录操作放行。获取请求头中的令牌token。判断令牌是否存在如果不存在返回错误结果未登录。解析token如果解析失败返回错误结果未登录。放行。 Interceptor的实现
Slf4j
Component
public class LoginInterceptor implements HandlerInterceptor {Override //目标方法执行前的执行返回true放行返回false不放行public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//获取urlString url request.getRequestURL().toString();log.info(url路径{},url);//获取tokenString token request.getHeader(token);log.info(token:{},token);//如果没有Tokenif (!StringUtils.hasLength(token)) {extracted(response);return false;}//解析tokentry {JwtUtils.parseJwt(token);} catch (Exception e) {e.printStackTrace();extracted(response);return false;}return true;}private void extracted(HttpServletResponse response) throws IOException {Result noLogin Result.error(用户未登录);response.setCharacterEncoding(UTF-8);response.getWriter().write(JSONObject.toJSONString(noLogin));}Override //目标方法执行后执行public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);}Override //视图渲染执行后执行最后执行public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {HandlerInterceptor.super.afterCompletion(request, response, handler, ex);}
}配置Interceptor
Configuration
public class WebConfig implements WebMvcConfigurer {AutowiredLoginInterceptor loginInterceptor;Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginInterceptor).addPathPatterns(/**).excludePathPatterns(/login);}
}
测试