TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
/**
0 Q% w3 Y. g( o; l. T*
. G- k7 m, B6 X9 r1 |* F6 R*
; ~+ y1 W4 Y* d' I3 i9 J* ) w7 T4 r- y8 |& m- N
* 拦截器的作用:
6 C' f$ ~1 W+ z7 r- z* 每个请求到达Controller之前,或者每个响应到达view之前,都可以进行拦截。 ( N K9 y% O7 J6 C! h0 x' x9 [/ p
* 1.全局日志(谁提交了请求,要做什么事)
" R: g- R; j; N T& S$ U( }* 2.权限管理(每个请求都能判断权限)
0 b/ `3 _9 W& n4 A+ G. [/ P* 代码: 3 u4 W( H$ M8 T) ^6 r0 q
* 写一个类,实现springframework.web.servlet.HandlerInterceptor接口
7 H1 X. N8 `# G* preHandle请求前拦截(尚未执行Controller)
; f) U" L- ^ H. f/ o e. }* postHandle控制器执行完,生成视图之前可以加入的动作(加入模型中的公共部分,如版权信息)
6 k! Z0 R0 D: Q1 e) s* afterCompletion 释放资源,比如在pre中打开了数据库链接,在这里可以进行关闭
, Q3 H# V& g( w- C5 j*
3 O9 u$ S9 q6 q6 |3 r' Q* 这三个方法根据业务选,不实不编写代码就可以了。 9 C: \4 e( T. \: {! X
* 4 v' Z P8 \ U* }* p
*
) r. I) s% M. {& z* 设置拦截器链 # W$ ~! _% T$ _: M* q5 A
* <mvc:interceptors>
. |6 L2 ^4 Z( Q$ m1 B$ b* <mvc:interceptor> 4 O# ^. Z" |+ ~5 t& t
* <mvc:mapping path=""/> 可选项。若不指定,则默认拦截所有请求; 若指定了,则只拦截符合一定模式的请求。
* k' v- L- G& I0 @- R* 例子:<mvc:mapping path="/user/*"/> eg:拦截user/下的所有请求 + E% {9 e: o$ T7 ~+ Z4 u! B
* <bean class="com.my.common.MyInterceptor"></bean> 8 F: S* C$ f) m; X
* </mvc:interceptor>
) f' I) ?" v) z+ ^5 ~*
3 A. \& ~5 A0 T1 d: T* c1 @+ Q: W, u5 ?* <mvc:interceptor> 拦截器链中的第二个 & i7 j, g( W0 B1 `
* </mvc:interceptor>
6 y& e$ \; a1 p*
i5 e" Y4 D' q9 V' x* </mvc:interceptors>
6 G5 g; \5 H2 H! R( b j! `*5 B; P" X! S$ `& P9 B: ^
9 |7 X' K; g$ X) @, V0 Q x
处理流程0 O0 C- Z; f- }) U" C5 P
% e7 [6 {3 p- O0 K- @' O. M1请求沿着拦截器①--拦截器②…拦截器N的preHandle方法执行,最终到达控制器
, V0 o* {! Y" X; d, X) v3 @2 D2 ^
. z9 _4 y2 n$ i" R$ l& u2在控制器执行完毕,将要生成视图之前依次执行拦截器N--拦截器N-1….拦截器②---拦截器①中的postHandle方法。 0 J- w+ ^2 [; g! x% }& W7 |5 f% S
*
. }4 e; g8 g* n*/ ~6 ]! ?! A2 B b7 x- d* \
5 r; H) C, i; o6 }' H) X# G7 }
|
|