TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
/** 7 l' O, g9 p$ Z {( @7 k7 P
*
9 @4 h) ^( C D; I4 @5 K/ R*
' L& A+ z) e) q6 ^*
7 A1 K& _$ N/ A, U; m$ ^* 拦截器的作用: ' [2 V' h( {& k3 F, f, B7 W7 ?
* 每个请求到达Controller之前,或者每个响应到达view之前,都可以进行拦截。 6 c* ^1 Z1 x2 O: _5 h
* 1.全局日志(谁提交了请求,要做什么事)
# m; b5 } }3 u. Y4 ]* 2.权限管理(每个请求都能判断权限) 1 D: f3 u& r& {4 k i+ \
* 代码:
( ]2 I6 e# c- y8 G3 ]$ F* 写一个类,实现springframework.web.servlet.HandlerInterceptor接口 + a. q e) L9 ?9 b7 _" H1 V5 z
* preHandle请求前拦截(尚未执行Controller)
5 D+ A5 d& X" P" H& { p! S* postHandle控制器执行完,生成视图之前可以加入的动作(加入模型中的公共部分,如版权信息)
. Z$ Y% i3 C4 q/ m1 y! B K3 s* afterCompletion 释放资源,比如在pre中打开了数据库链接,在这里可以进行关闭 ; M `( q9 `9 d& ]
* 8 F* X, b7 \! z! k( r
* 这三个方法根据业务选,不实不编写代码就可以了。
. ^: K/ {8 ?5 k3 p4 C* : }8 h. w( `1 x: Q
* / K0 ^3 A! x. u% k; y: S
* 设置拦截器链 7 N" ~% \6 s) |3 A1 [% l2 G1 X
* <mvc:interceptors> & P+ C' B% ?" N- b
* <mvc:interceptor>
6 B# d# V, ]4 l! e% w+ A" ?* <mvc:mapping path=""/> 可选项。若不指定,则默认拦截所有请求; 若指定了,则只拦截符合一定模式的请求。
9 q* L0 r6 s8 { n$ k" m: Q* 例子:<mvc:mapping path="/user/*"/> eg:拦截user/下的所有请求 8 n: K/ a+ a. N$ e
* <bean class="com.my.common.MyInterceptor"></bean> " C6 F" }1 T$ y6 g/ x3 t0 [7 o
* </mvc:interceptor>
6 U/ \: f6 G( Y6 Z( a, t) ~*
9 { A" F/ `# v' i* <mvc:interceptor> 拦截器链中的第二个 : {: s1 X2 H* y) D! ]1 ~ Q
* </mvc:interceptor> 6 E. B. ~- c9 J
* 5 ?, D- ~8 G0 Z8 G* ?
* </mvc:interceptors>
& f H p! A% V; c) [3 o2 l. n* f1 v*- V: T0 I' Y# e" c& t1 M
0 Y3 h; s' J2 Q8 R处理流程$ H1 `% z2 m# S' o" l0 b
4 i: I. U/ z- j1 ~8 h1请求沿着拦截器①--拦截器②…拦截器N的preHandle方法执行,最终到达控制器8 B- e- f0 n& _- J G( P3 r7 P
/ M0 D4 x; y6 o# n' @, O2在控制器执行完毕,将要生成视图之前依次执行拦截器N--拦截器N-1….拦截器②---拦截器①中的postHandle方法。
+ d2 H1 P0 u* O4 J& x, n*
! n: l( a# d; x& _8 `*/
1 n* M4 i9 W; ]6 n
6 v3 G! Q3 M3 W" u |
|