北京网站页设计制作,wordpress 暂时关闭,做公众号的网站模板下载,老板企业管理培训课程目录
1 拦截器介绍
2 创建一个拦截器类
3 配置拦截器 1 拦截器介绍 在 SpringMVC 中#xff0c;拦截器 (Interceptor) 是一种用于拦截 HTTP 请求并在请求处理之前或之后执行自定义逻辑的组件。拦截器可以用于实现以下功能#xff1a;
权限验证#xff1a;在请求处理之前…目录
1 拦截器介绍
2 创建一个拦截器类
3 配置拦截器 1 拦截器介绍 在 SpringMVC 中拦截器 (Interceptor) 是一种用于拦截 HTTP 请求并在请求处理之前或之后执行自定义逻辑的组件。拦截器可以用于实现以下功能
权限验证在请求处理之前进行用户身份验证和授权日志记录记录请求的相关信息如请求路径、参数、处理时间等异常处理捕获并处理请求处理过程中抛出的异常性能监控统计请求的响应时间、吞吐量等性能指标数据转换在请求处理之前或之后对请求或响应的数据进行转换或修改缓存控制在请求处理之前检查缓存决定是否从缓存中获取数据
从以上功能可以看出拦截器和过滤器作用很相似但它们存在一些区别。
层次结构拦截器是 SpringMVC 框架特有的组件不依赖 servlet 容器过滤器是 Web 容器级别的组件依赖 servlet 容器可以应用于任何 Web 应用拦截范围拦截器只能对 SpringMVC 的请求起作用而过滤器则可以对几乎所有的请求起作用。拦截器可以获取 Spring 容器中的各个 bean而过滤器就不行在拦截器注入一个 service可以调用业务逻辑触发时机拦截器在 SpringMVC 的控制器方法被调用之前或之后触发可以拦截并处理控制器方法的调用。过滤器在 HTTP 请求到达 Web 服务器之前或之后触发可以在请求进入应用 (SpringMVC) 之前或响应返回给客户端之前进行处理调用顺序过滤器在拦截器之前被调用它们都可以按照 XML 文件中的配置顺序依次执行或注解 Order 指定的顺序执行
2 创建一个拦截器类 创建一个拦截器类需要实现 HandlerInterceptor 接口该接口包括三个方法preHandle、postHandle 和 afterCompletion。在这些方法中可以编写拦截器的逻辑。
preHandle控制器方法执行之前执行 preHandle()其 boolean 类型的返回值表示是否拦截或放行返回 true 表示放行即调用控制器方法返回 false 表示拦截即不调用控制器方法 postHandle控制器方法执行之后渲染视图之前执行 postHandle() afterComplation处理完视图和模型数据渲染视图完毕之后执行 afterComplation()
public class CustomInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 在处理器执行之前调用String userNamerequest.getParameter(userName);String password request.getParameter(password);if (userNamenull||passwordnull){response.setStatus(500);response.setContentType(text/html; charsetUTF-8);response.getWriter().print(参数缺失);return false;}//进行用户校验if (userName.equals(admin)password.equals(admin)){return true; // 返回true继续执行返回false中断执行}else {response.setStatus(500);response.setContentType(text/html; charsetUTF-8);response.getWriter().print(用户名或密码错误);return false;}}Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {// 在处理器执行之后返回ModelAndView之前调用}Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {// 在整个请求处理完成后调用}
}3 配置拦截器
基于注解 addPathPatterns 用于设置拦截哪些请求excludePathPatterns 用于设置不拦截哪些请求 Configuration
public class MvcConfig implements WebMvcConfigurer {Autowiredprivate CustomInterceptor customInterceptor ;Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(customInterceptor).addPathPatterns(/**).excludePathPatterns(/error);}
}
基于 XML 通过 mvc:mapping 设置需要拦截的请求通过 mvc:exclude-mapping 设置需要排除的请求即不需要拦截的请求 mvc:interceptorsmvc:interceptor!-- 拦截所有 URL --mvc:mapping path/**/!-- 不拦截 /testRequestEntity/ --mvc:exclude-mapping path/testRequestEntity/-- 拦截器类 --bean classcom.example.CustomInterceptor //mvc:interceptor
/mvc:interceptors
注对于多个拦截器前面的拦截器不通过即 preHandle() 返回 false中断后续执行。