星空网 > 软件开发 > Java

SpringMVC中拦截器的使用

什么是**

**通常一般指的是通过拦截从浏览器发往服务器的一些请求来完成某些功能的一段程序代码
一般在一个请求发生之前,发生时,发生后我们都可以对请求进行拦截

**可以做什么

**可以用于权限验证、解决乱码、操作日志记录、性能监控、异常处理等

自定义**

可以通过继承Spring框架中的HandlerInterceptorAdapter类,然后重写preHandle,postHandle,afterCompletion三个方法,在三个方法中写我们自己要想实现的业务逻辑代码.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/**
* 自定义**
* @author admol
*/
public class MyInterceptor extends HandlerInterceptorAdapter {
/**
* 在请求之前执行
* @param request
* @param response
* @param handler 表示被拦截的请求目标
* @return false:拦截请求,终止请求 true:继续执行请求
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
//业务逻辑代码编写...(如:解决乱码,权限验证)
request.setCharacterEncoding("utf-8");
return true;
}

/**
* @param modelAndView 可以对视图进行操作
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response,
Object handler, ModelAndView modelAndView) throws Exception {
//业务逻辑代码编写...(如:操作日志记录,更改视图信息)
}

/**
* @param ex 异常
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex) throws Exception {
//业务逻辑代码编写...(如:,资源销毁,异常处理)
}
}

 

a) public boolean preHandle(HttpServletRequest request,HttpServletResponse response,
Object handler) throws Exception
该方法在action执行前执行,可以实现对数据的预处理,比如:编码、防重复提交安全控制等。
如果方法返回true,则继续执行action。返回false则拦截请求

b) public void postHandle(HttpServletRequest request,HttpServletResponse response,
Object handler,ModelAndView modelAndView) throws Exception
该方法在action执行后,生成视图前执行。在这里,我们有机会修改视图层数据。

c) public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception
最后执行,通常用于释放资源,处理异常。我们可以根据ex是否为空,来进行相关的异常处理。

注册**

1
2
3
<mvc:interceptors>
<bean id="myInterceptor" class="com.admol.web.MyInterceptor" />
</mvc:interceptors>

 

当有多个**的时候可以写多个bean
当我们只想拦截部分指定请求时:

1
2
3
4
5
<mvc:interceptors>
<!-- path:需要拦截的请求,不写时会拦截所有请求 -->
<mvc:mapping path="/*.htm" />
<bean id="myInterceptor" class="com.admol.web.MyInterceptor" />
</mvc:interceptors>

 

多个**

1
2
3
4
<mvc:interceptors>
<bean id="myInterceptor" class="com.admol.web.MyInterceptor" />
<bean id="myInterceptor2" class="com.admol.web.MyInterceptor2" />
</mvc:interceptors>

 

当配置有多个**的时候,会按**顺序执行preHandle方法,然后再倒序执行postHandle和afterCompletion方法。

其他实现方式

  1. 实现接口 implements HandlerInterceptor
  2. 实现接口 implements WebRequestInterceptor
    注册**方法不变

与过滤器的区别

1.过滤器是依赖于Servlet容器,基于回调函数,Intercepto依赖与框架,基于反射机制
2.过滤器的过滤范围更大,还可以过滤一些静态资源,**只拦截请求




原标题:SpringMVC中拦截器的使用

关键词:Spring

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

shopee店铺什么时候开广告比较好?:https://www.goluckyvip.com/news/7451.html
Shopee巴西新增5个配送中心:https://www.goluckyvip.com/news/7452.html
eBay宣布和联邦快递合作,或将帮助亚太地区跨境卖家:https://www.goluckyvip.com/news/7453.html
中国海运家具到加拿大的详细流程和注意事项:https://www.goluckyvip.com/news/7454.html
关于Lazada,shopee,ebay,速卖通等补单问题 :https://www.goluckyvip.com/news/7455.html
shopee广告玩法之引流怎么投?:https://www.goluckyvip.com/news/7456.html
武陵山大裂谷周围景点 武陵山大裂谷周围景点图片:https://www.vstour.cn/a/411233.html
南美旅游报价(探索南美洲的旅行费用):https://www.vstour.cn/a/411234.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流