HandlerInterceptor的使用::
1、org.springframework.web.servlet.HandlerInterceptor位于spring-webmvc.jar中,是一个spring拦截器,默认实现类为:
org.springframework.web.servlet.handler.HandlerInterceptorAdapter
2、可用于拦截用户的每个请求数据,主要作用如下:
用户登陆以及用户权限管理;
打印请求处理时间;
打印请求参数等;
根据用户的选择来决定是用HTML还是用Excel来作为View,来决定返回数据对象;
blackboard building block的应用:在每一个controller之前都要生成context,在render view之后都要release context
3、方法说明
boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;
该方法会在Controller的方法执行前会被调用,可以使用这个方法来中断或者继续执行链的处理(可多个反向调用的处理器链,通过DispathcherServlet来管理并调用每个拦截器的preHandle方法,其本身是最后一个处理器),当返回true时,处理执行链会继续,当返回false时,则不会去执行Controller的方法
void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception;
在controller的方法执行之后,在DispatcherServlet类导向到view进行render之前依次执行。因为它有ModelAndView 传进来,那么我们就可以在render view之前往view中添加额外的model对象,或者对view的去处进行修改
void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception;
在请求过程(request processing)完成后(在render view完成后)执行,作为最后一个拦截器执行,用于清理资源
上述三个方法都是异步方法,由DispatcherServlet在controller之前(调用controller前)执行所有拦截器链中的preHandle方法,可用于判断是由有权限访问或返回错误码,preHandle方法返回true时继续执行,否则,终止;postHandle在调用controller后转向视图前执行
4、实例应用
登录验证:
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
Admin user = (Admin) request.getSession().getAttribute("admin");
//此处,还可通过httpServletRequest.getParameterNames();方法来打印该请求的所有请求参数信息
String requestURI = request.getRequestURI();
String loginUrl = "/login.jhtml";
String uri = requestURI.substring(requestURI.lastIndexOf("/"));
if (user == null) {
if (uri.startsWith("/login") || uri.startsWith("/imageLogin") || uri.startsWith("/checkLogin")) {
return true;
} else {
// 非法请求 重定向到登录页面
response.sendRedirect(request.getContextPath() + loginUrl);
return false;
}
} else {
// 添加日志
String ip = request.getRemoteAddr();
Log log = new Log();
log.setIp(ip);
ThreadLocalUtils.set(log);
return true;
}
}
打印请求处理时间:
在preHandle方法记录请求处理前的时间并绑定到线程变量ThreadLocal类(只有当前请求线程可见)中,在执行完成后执行afterCompletion方法时,再从本地线程中获取请求相应的时间并执行打印
分享到:
相关推荐
在Spring Boot框架中,拦截器(HandlerInterceptor)是一种强大的机制,用于在请求处理前后执行自定义逻辑。在本文中,我们将深入探讨Spring Boot中的拦截器,了解其工作原理、如何实现以及实际应用。 首先,Spring...
浅谈SpringMVC HandlerInterceptor诡异问题排查 SpringMVC中的HandlerInterceptor是非常重要的组件之一,它可以在...同时,我们也可以学习到如何正确地使用HandlerInterceptor和ThreadLocal,避免类似的问题的出现。
"springMVC拦截器HandlerInterceptor用法代码示例" springMVC拦截器HandlerInterceptor是一种非常重要的技术,它可以帮助我们拦截用户的请求,从而知道页面请求的是哪个class的哪个方法。本文将详细介绍springMVC...
详细描述见https://my.oschina.net/u/2245781/blog/1595860
本篇文章主要探讨了Interceptor的使用及其源码解析,帮助深入理解其工作原理。 Interceptor在Spring MVC中的角色: 1. **预处理**:在DispatcherServlet调用Controller之前,Interceptor可以执行一些预处理操作,如...
Spring_MVC的执行流程包括:接收到请求 -> DispatcherServlet -> HandlerMapping -> HandlerAdapter -> Controller -> HandlerInterceptor(预处理) -> Controller执行业务逻辑 -> HandlerInterceptor(后处理) -> ...
二、RequestMapping 注解的使用与原理 @RequestMapping注解是Spring MVC中用于映射HTTP请求到控制器方法的关键工具。它可以应用于类或方法级别,以指定处理特定URL的请求。例如: ```java @Controller @...
- HandlerInterceptor接口:在Spring MVC中,通常实现HandlerInterceptor接口来创建自定义拦截器。 - @AspectJ注解:Spring也支持基于注解的AOP,可以通过@Aspect注解定义切面,并使用@Before、@After等来定义拦截...
Spring拦截器HandlerInterceptor接口代码解析 Spring拦截器HandlerInterceptor接口代码解析是Spring框架中的一种重要机制,它允许开发者在请求处理过程中执行自定义逻辑,以达到验证、日志记录、性能监控、安全检查...
- `HandlerInterceptor`: 自定义拦截器接口,实现 `preHandle`, `postHandle`, `afterCompletion` 方法。 6. **视图解析** - Spring MVC 提供多种视图技术支持,如 JSP、Thymeleaf、FreeMarker 等。 - 视图解析...
Spring Boot是一个非常流行的Java Web开发框架...通过上述的知识点和示例代码,我们可以看到在Spring Boot中创建和使用拦截器是一件相对简单的事情,但它的功能却非常强大,能够帮助开发者完成很多高级的请求处理任务。
5. HandlerInterceptor:拦截器接口,用于在请求处理前后执行自定义逻辑,例如身份验证、日志记录等。 二、Spring MVC核心流程: 1. 用户发起请求到达DispatcherServlet。 2. DispatcherServlet根据HandlerMapping...
5. HandlerInterceptor:拦截器接口,用于在请求被处理前后执行自定义逻辑,实现如认证、日志记录等功能。 二、Spring MVC的核心流程 1. 用户发送HTTP请求到达DispatcherServlet。 2. DispatcherServlet查找合适的...
在JavaServer Pages (JSP) 开发中,...3. **JDBC**:使用JDBC API进行数据库连接、查询和操作,实现用户身份验证。 通过这个实验,你将能够掌握Web应用程序中安全控制的关键技术,并学会如何将它们整合到实际项目中。
使用HandlerInterceptor进行了操作权限控制+前端th:if等 数据库表使用自增唯一ID 封装了mybatis-plus-generator代码生成器,使用菜单操作即可生成前后端代码 内置swagger2接口API 加密: AES + Base64 等 系统访问...
使用HandlerInterceptor进行了操作权限控制 数据库表使用自增唯一ID 封装了mybatis-plus-generator代码生成器,使用菜单操作即可生成前后端代码 内置swagger2接口API 环境jdk1.8 使用AOP切面实现日志数据库存储 ...
使用HandlerInterceptor进行了操作权限控制 数据库表使用自增唯一ID 封装了mybatis-plus-generator代码生成器,使用菜单操作即可生成前后端代码 内置swagger2接口API 环境jdk1.8 使用AOP切面实现日志数据库存储 ...
- **Spring 4 vs Spring 5**:在Spring 4中,`HandlerInterceptor`接口的三个方法都需要重写,而在Spring 5中,可以使用默认方法,简化了代码。 综上所述,订单业务处理涉及用户信息获取、数据传递、缓存管理和...