TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
/** ' B1 A& g* r& S* K4 H+ ?3 y" N2 P
* ( }- F+ S4 t- Q7 t
* * i0 m* Z+ i/ p4 ]. j4 X6 C
*
Y! L7 ~3 I n) D) B, y7 _* 拦截器的作用: ( ~- n% h$ G; B3 L5 h2 A4 ]
* 每个请求到达Controller之前,或者每个响应到达view之前,都可以进行拦截。 6 N0 }) n: U1 i Z( D5 C) X
* 1.全局日志(谁提交了请求,要做什么事) * _4 J; u7 c# y
* 2.权限管理(每个请求都能判断权限) - _" D1 F8 j6 q1 {/ N- k
* 代码:
3 `2 E6 _* F1 R$ ]7 `# K! }* 写一个类,实现springframework.web.servlet.HandlerInterceptor接口 " C) T2 e2 [/ \: ^3 R
* preHandle请求前拦截(尚未执行Controller) - F& A( d6 \3 A7 M3 Z" Y
* postHandle控制器执行完,生成视图之前可以加入的动作(加入模型中的公共部分,如版权信息) 2 q9 B& d; a% o- U$ V
* afterCompletion 释放资源,比如在pre中打开了数据库链接,在这里可以进行关闭
$ M- u) N& u! ?* 6 t8 t- }" [. V. E# _3 F& m+ r
* 这三个方法根据业务选,不实不编写代码就可以了。
* I8 w0 A4 N4 ^% H) Q0 X7 ?) x*
* C1 N) T5 K" q; {* G0 ^' Z* E3 Z8 ^*
* Z0 a6 u s. }7 V& t1 q& ^* 设置拦截器链
; z0 ]3 k" Q o0 d s* <mvc:interceptors> 3 g, k1 ?9 R6 h0 [
* <mvc:interceptor>
0 ^7 P, k$ [% X+ I* <mvc:mapping path=""/> 可选项。若不指定,则默认拦截所有请求; 若指定了,则只拦截符合一定模式的请求。 6 s6 a' k# O/ s" g
* 例子:<mvc:mapping path="/user/*"/> eg:拦截user/下的所有请求
+ q1 e7 }% I4 \7 N% B5 B O* <bean class="com.my.common.MyInterceptor"></bean>
; p3 X& _: Z' F6 E3 Q9 w* </mvc:interceptor> 3 p# h. I0 L% P6 {' a7 }
* % I8 N' X, v5 o, s2 D1 H
* <mvc:interceptor> 拦截器链中的第二个
) h5 @5 \1 X5 Q' f# ?* </mvc:interceptor>
- x: D' q+ s& w5 @*
: W* v4 p" Y: f$ }* </mvc:interceptors>
, ~9 l' A1 ?7 U7 S0 b*! @! E" J3 T! f" r/ ^
4 O* V1 o2 a b2 r处理流程; {# ^0 k' N/ [; d. ^: Z; C
( `6 l) A1 o* I1请求沿着拦截器①--拦截器②…拦截器N的preHandle方法执行,最终到达控制器
" x( ^" \" ~4 }1 K! P" ^- u; ?) L) |; A3 u: [
2在控制器执行完毕,将要生成视图之前依次执行拦截器N--拦截器N-1….拦截器②---拦截器①中的postHandle方法。 - f. p) k1 W# ^& ~ W" n
*
X9 R* P. U, w p3 ?*/# B( n. D$ A6 b2 j- j
2 e! m4 w$ P+ n
|
|