美文网首页
SpringMVC框架如何定义拦截器呢?

SpringMVC框架如何定义拦截器呢?

作者: 天上的小仙女呀 | 来源:发表于2020-11-23 09:46 被阅读0次

SpringMVC 拦截器的定义方式

  • 实现接口

  • 继承适配器

案例实操

实现接口

实现 HandlerInterceptor 接口方式定义我们的拦截器代码如下:

public class MyInterceptor implements HandlerInterceptor{ 
​
 /** 
​
 * preHandle 在请求方法拦截前执行 
​
 * 返回 true 代表对当前请求进行放行处理 
​
 */ 
​
 @Override 
​
 public boolean preHandle(HttpServletRequest request, 
​
 HttpServletResponse response, Object handler) throws Exception { 
​
 System.out.println("action 之前执行!!!"); 
​
 return true; //继续执行 action 
​
 } 
​
 /** 
​
 * 请求执行后,生成视图前执行 
​
 */ 
​
 @Override 
​
 public void postHandle(HttpServletRequest request, 
​
 HttpServletResponse response, Object handler, 
​
 ModelAndView modelAndView) throws Exception { 
​
 System.out.println("Action 执行之后,生成视图之前执行!!"); 
​
 } 
​
 /** 
​
 * 在请求方法执行后进行拦截 
​
 */ 
​
 @Override 
​
 public void afterCompletion(HttpServletRequest request, 
​
 HttpServletResponse response, Object handler, Exception ex) 
​
 throws Exception { 
​
 System.out.println("方法执行后进行拦截。。释放资源。。。"); 
​
 } 
​
} 

对应配置有两种方式:

配置方式一(拦截所有请求配置方式):

<mvc:interceptors>

 <bean class="com.xxx.interceptors.MyInterceptor" /> 
​
</mvc:interceptors> 

配置方式二(拦截指定请求配置方式)

[mvc:interceptors](mvc:interceptors)

<!-- 定义在 mvc:interceptor 下面 拦截所有 test 地址开头的请求-->

<mvc:interceptor> 
​
 <mvc:mapping path="/test/*.do" /> 
​
 <bean class="com.xxx.interceptors.MyInterceptor" /> 
​
 </mvc:interceptor> 
​
</mvc:interceptors> 

多个拦截器配置(多个拦截器组成一个拦截器链 ,栈式结构 123 321 退出):

<mvc:interceptors> 
​
 <mvc:interceptor> 
​
 <!-- 拦截所有请求 --> 
​
 <mvc:mapping path="/**" /> 
​
 <bean class="com.xxx.interceptors.MyInterceptor" /> 
​
 </mvc:interceptor> 
​
 <mvc:interceptor> 
​
 <!-- 拦截所有请求 --> 
​
 <mvc:mapping path="/**" /> 
​
 <bean class="com.xxx.interceptors.MyInterceptor2" /> 
​
 </mvc:interceptor> 
​
</mvc:interceptors> 

继承适配器

继承 HandlerInterceptorAdapter 方式定义拦截器(实际上最终还是 HandlerInterceptor 接口实现)

public class MyInterceptor2 extends HandlerInterceptorAdapter{ 
​
 /** 
 * 重写 preHandle 请求执行前执行 
 */ 
​
 @Override 
​
 public boolean preHandle(HttpServletRequest request, 
​
 HttpServletResponse response, Object handler) throws Exception { 
​
 System.out.println("请求前执行。。。"); 
​
 return true; 
​
 } 
​
} 

扩展

使用拦截器完成用户是否登录请求验证拦截器定义:

public class LoginInterceptor implements HandlerInterceptor{ 
​
 /** 
​
 * 方法拦截前执行 
​
 */ 
​
 @Override 
​
 public boolean preHandle(HttpServletRequest request, 
​
 HttpServletResponse response, Object handler) throws Exception { 
​
 User user= (User) request.getSession().getAttribute("user"); 
​
 /** 
​
 * 判断 uri 是否包含路径 
​
 * 包含就放行 
​
 */ 
​
 if(request.getRequestURI().indexOf("userLogin.do")>-1){ 
​
 return true; 
​
 } 
​
 /** 
​
 * 判断 session user 是否为空 
​
 */ 
​
 if(null==user){ 
​
 response.sendRedirect(request.getContextPath()+"/login.jsp"); 
​
 return false; 
​
 } 
​
 return true; //继续执行 action 
​
 } 
​
 @Override 
​
 public void postHandle(HttpServletRequest request, 
​
 HttpServletResponse response, Object handler, 
​
 ModelAndView modelAndView) throws Exception { 
​
 System.out.println("Action 执行之后,生成视图之前执行!!"); 
​
 } 
​
 /** 
​
 * 在方法执行后进行拦截 
​
 */ 
​
 @Override 
​
 public void afterCompletion(HttpServletRequest request, 
​
 HttpServletResponse response, Object handler, Exception ex) 
​
 throws Exception { 
​
 System.out.println("方法执行后进行拦截。。释放资源。。。"); 
​
 } 
​
} 

UserController 类

/** 
​
* 
​
* @author Administrator 
​
* 模拟 用户操作 
​
*/ 
​
@Controller 
​
@RequestMapping("/user") 
​
public class UserLoginController { 
​
 @RequestMapping("/userLogin") 
​
 public ModelAndView userLogin(HttpServletRequest request){ 
​
 ModelAndView mv=new ModelAndView(); 
​
 User user=new User(); 
​
 user.setUserName("xxx"); 
​
 user.setUserPwd("123456"); 
​
 request.getSession().setAttribute("user", user); 
​
 mv.setViewName("success"); 
​
 return mv; 
​
 } 
​
 @RequestMapping("/addUser") 
​
 public ModelAndView addUser(){ 
​
 System.out.println("添加用户记录。。。"); 
​
 ModelAndView mv=new ModelAndView(); 
​
 mv.setViewName("success"); 
​
 return mv; 
​
 } 
​
 @RequestMapping("/delUser") 
​
 public ModelAndView delUser(){ 
​
 ModelAndView mv=new ModelAndView(); 
​
 mv.setViewName("success"); 
​
 return mv; 
​
 } 
​
 @RequestMapping("/updateUser") 
​
 public ModelAndView updateUser(){ 
​
 ModelAndView mv=new ModelAndView(); 
​
 mv.setViewName("success"); 
​
 return mv; 
​
 }
}

相关文章

  • SpringMVC框架如何定义拦截器呢?

    SpringMVC 拦截器的定义方式 实现接口 继承适配器 案例实操 实现接口 对应配置有两种方式: 配置方式一(...

  • 拦截器

    注册拦截器 定义拦截器 另外对比SpringMVC 的拦截器,在SpringMVC.xml配置

  • 拦截器

    一 拦截器 定义拦截器,实现HandlerInterceptor接口 二 springMVC 拦截器配置 1 针对...

  • SpringMVC框架中的拦截器

    1.拦截器的概述 SpringMVC框架中的拦截器用于对处理器进行预处理和后处理的技术。可以定义拦截器链,连接器链...

  • SpringMVC拦截器

    SpringMVC拦截器 拦截器的定义 自定义的拦截器需要实现一个接口HandlerInterceptor,并实现...

  • 22_SpringMVC拦截器

    1. SpringMVC框架中的拦截器用于对处理器进行预处理和后处理的技术。 2. 可以定义拦截器链,连接器链就是...

  • springmvc 14 拦截器

    自定义拦截器 1. 自定义的拦截器实现HandlerInterceptor接口 2. 在springmvc中配置拦...

  • springMVC--拦截器配置

    springMVC--拦截器配置: 自定义拦截器类,实现HandleIntercepor接口或者继承Handler...

  • SpringMVC学习笔记 | SpringMVC拦截器详解:自

    自定义拦截器 SpringMVC可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义拦截...

  • SpringMVC学习笔记(一)——原理以及源码分析

    1.SpringMVC框架 1.1定义 springmvc是spring框架的一个模块,springmvc和spr...

网友评论

      本文标题:SpringMVC框架如何定义拦截器呢?

      本文链接:https://www.haomeiwen.com/subject/bysmiktx.html