Java Spring MVC 框架:(九)拦截器的使用
程序员文章站
2022-07-09 19:52:41
...
1.理解示意图
蓝色为拦截器,很直观…蓝=拦,手动滑稽
2.内容原理
使用 SpringMVC 的拦截器:
原理:
- 在 Servlet 和控制器单元方法之间进行拦截
使用:
- 创建拦截器类,创建一个实现了 HandlerInterceptor 接口的 java 类
- 并复写方法preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2)
作用:
- 拦截单元方法,返回值为 false 则拦截,返回值为 true 则放行
参数:
- HttpServletRequest arg0,拦截的请求的 request 对象
- HttpServletResponse arg1, 拦截的请求的 response 对象
- Object arg2 封存了单元方法对象的 HandleMethod 对象postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
- HttpServletRequest arg0, 拦截的请求的 request 对象
- HttpServletResponse arg1, 拦截的请求的 response 对象
- Object arg2, 封存了单元方法对象的 HandleMethod 对象
- ModelAndView arg3 封存了单元方法的返回值资源路径和请 求转到的 Map 数据afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
- HttpServletRequest arg0, 拦截的请求的 request 对象
- HttpServletResponse arg1, 拦截的请求的 response 对象
- Object arg2, 封存了单元方法对象的 HandleMethod 对象
- Exception arg3 存储了责任链的异常信息
注意:
- 拦截器的方法执行顺序
- preHandle—>单元方法—>postHandle—>afterCompletion
3.代码实现
package com.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
public class MyInter implements HandlerInterceptor {
/**
* 执行的时机: 在进入控制单元方法之前
* <p>
* 这个方法的返回值决定了是否继续执行控制单元的方法
* <p>
* 返回值是true --就进入控制单元继续执行
* <p>
* 返回值是false--就不会继续执行
* <p>
* o--即将执行控制单元中方法对象
*/
@Override
public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object o) throws Exception {
//作用一:进行中文乱码的处理
// req.setCharacterEncoding("utf-8");
//作用二:进行页面的拦截
//resp.sendRedirect("/ssm_login/wh.jsp");
//System.out.println("preHandle"+o);
return true;
}
/**
* 执行的时机:在进行数据处理之后
* <p>
* o:控制单元方法
* <p>
* modelAndView:视图模型对象
*/
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
//作用一: 用于控制单元中模块的测试
//modelAndView.setViewName("redirect:/success2.jsp");
//System.out.println("postHandle");
//作用二:恶意字符的替换
//【A】获得map集合中的内容
Map<String, Object> map = modelAndView.getModel();
//登陆失败枪支
String msg = (String) map.get("msg");
if (msg.contains("枪支")) {
// 登陆失败**
String all = msg.replaceAll("枪支", "**");
map.put("msg", all);
}
}
/**
* 执行时机:在进行页面渲染的时候执行
* <p>
* 主要就是页面渲染操作和最后的垃圾回收
*/
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
System.out.println("afterCompletion");
}
}
上一篇: HUSTOJ平台的搭建
推荐阅读
-
Java Spring MVC 框架:(九)拦截器的使用
-
Java轻量级MVC框架Struts2 2.5详解(4)Struts2的拦截器
-
spring mvc中拦截器的配置和使用
-
使用Spring3.x框架的java mail支持来发送邮件
-
详述 Spring MVC 框架中拦截器 Interceptor 的使用方法
-
详述 Spring MVC 框架中拦截器 Interceptor 的使用方法
-
Spring MVC拦截器(Interceptor)的配置及使用
-
详述 Spring MVC 框架中拦截器 Interceptor 的使用方法
-
【Spring MVC】—— Interceptor 拦截器 的使用
-
【转】详述 Spring MVC 框架中拦截器 Interceptor 的使用方法