TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
/** 5 u/ ?" q/ ]; T" y% y" Y
*
# T& v& a# d$ c2 P2 d* 5 h' I, R% g }, h9 l
*
1 A7 _5 \2 X: m; s) h7 E4 F* 拦截器的作用: 2 n# d: X$ f! x0 a8 [2 R& L
* 每个请求到达Controller之前,或者每个响应到达view之前,都可以进行拦截。 ) [. z, l9 F& Q2 r
* 1.全局日志(谁提交了请求,要做什么事)
/ b! T: f3 Z( D" J: N5 O* 2.权限管理(每个请求都能判断权限) % u7 p9 [9 _9 X8 @
* 代码:
5 N" X! N. m6 P# x0 p3 }* 写一个类,实现springframework.web.servlet.HandlerInterceptor接口 C. g8 {2 p+ e+ {$ u$ W
* preHandle请求前拦截(尚未执行Controller)
) y' D T8 ]1 d% z4 K. C* postHandle控制器执行完,生成视图之前可以加入的动作(加入模型中的公共部分,如版权信息)
' G; v% K9 w, D, Z0 |* afterCompletion 释放资源,比如在pre中打开了数据库链接,在这里可以进行关闭 - j8 d' D/ F7 \: ]) X1 [4 @& W
* 1 K( x" y8 `4 l2 i2 {, K
* 这三个方法根据业务选,不实不编写代码就可以了。
& {4 T( A* g) R4 j*
, x- Z; K$ K3 N*
/ t/ V' s) r- \ H, J* 设置拦截器链
% x% i7 P( m- N$ E, e* <mvc:interceptors> . l/ E2 r1 c9 h) R+ ^5 M t
* <mvc:interceptor>
1 ^" `. i' k0 ?: |+ D! ]# Q* <mvc:mapping path=""/> 可选项。若不指定,则默认拦截所有请求; 若指定了,则只拦截符合一定模式的请求。
4 F6 [2 o4 ~( f6 ~/ W5 C. @: g* 例子:<mvc:mapping path="/user/*"/> eg:拦截user/下的所有请求
^5 m2 M' `. G: v' q: V6 R* <bean class="com.my.common.MyInterceptor"></bean> 7 i& m; J3 J9 g( V5 _
* </mvc:interceptor>
0 y& }+ g7 n# |3 a6 ~' C( t*
, W' p F4 D8 M+ p7 ^: T; C* <mvc:interceptor> 拦截器链中的第二个 % M/ |/ X/ m; P4 O( D9 j
* </mvc:interceptor>
+ Y, n7 V8 C s. l5 K; v( N- l* " ?9 J. v5 c8 Z4 C. i* _0 }
* </mvc:interceptors>
% e3 ^: Q) Y( \6 X*8 ^+ b% y$ V! g* t" B
4 P; r) t$ o( V G; `
处理流程( p8 R F5 Z7 V0 [( Q# E8 M
5 u8 P0 w8 @. [6 d1请求沿着拦截器①--拦截器②…拦截器N的preHandle方法执行,最终到达控制器
) E5 }# p; x# r9 {0 T2 r- g5 X6 ~
2在控制器执行完毕,将要生成视图之前依次执行拦截器N--拦截器N-1….拦截器②---拦截器①中的postHandle方法。
, G& V* U8 z+ K7 m4 h# _- q* . K/ w5 m T# k1 \. A! |
*/
4 {. z/ z+ w: A0 o. e# P( o; J& c1 _$ p0 B8 d) _0 S
|
|