TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
/**
- }+ S9 z! W, L6 n1 [. }3 ?# [*
8 T& P& i7 {6 X6 y*
. d x) }2 a+ V$ m*
% W3 Q5 }1 u9 p; t* 拦截器的作用:
& C* x: ^1 L8 w6 g+ v* 每个请求到达Controller之前,或者每个响应到达view之前,都可以进行拦截。 ) ]( O# O0 Y/ C4 V2 u' Y6 ]; J
* 1.全局日志(谁提交了请求,要做什么事)
2 q X2 l% g0 f8 q. ?- A* 2.权限管理(每个请求都能判断权限) 9 [& [7 Q8 ?/ G
* 代码:
! ~( {/ J, M; h- z ~# L* 写一个类,实现springframework.web.servlet.HandlerInterceptor接口 * P. s4 P8 `4 g! Z$ L7 {' o
* preHandle请求前拦截(尚未执行Controller) 9 ]5 s7 r e. ^8 y( F3 L! X
* postHandle控制器执行完,生成视图之前可以加入的动作(加入模型中的公共部分,如版权信息) % t# C" o) ~: M, `; S
* afterCompletion 释放资源,比如在pre中打开了数据库链接,在这里可以进行关闭
/ C- q8 T2 d/ F) t*
N6 k0 K$ h' P+ b% F* 这三个方法根据业务选,不实不编写代码就可以了。 3 G2 P" k- T f# I' L# P/ P: t- G& @
* % L6 T/ S& p% B* `! c/ y! M
* 6 ?. \! o$ @5 X
* 设置拦截器链
% v5 [+ ]8 H/ W1 m; f* <mvc:interceptors> : q% b; M4 B! H7 H T
* <mvc:interceptor>
& L: \% `( y$ O+ }* g* <mvc:mapping path=""/> 可选项。若不指定,则默认拦截所有请求; 若指定了,则只拦截符合一定模式的请求。 & _, e- ]6 Z, V7 ^* b3 m
* 例子:<mvc:mapping path="/user/*"/> eg:拦截user/下的所有请求
4 o8 Q) o7 n, j: c- ]& m" T* <bean class="com.my.common.MyInterceptor"></bean>
k$ I0 I# c/ j1 }- B) k5 ?" g$ V. r* K* </mvc:interceptor> ! a* [2 E# H' m+ ~, M
*
! J! [0 `" A8 E9 S- \$ {* <mvc:interceptor> 拦截器链中的第二个 0 g3 J: n" }+ M% P2 h% \4 C7 I
* </mvc:interceptor> ( k$ l2 N( z' E$ ~) o
* 7 | o+ J n2 n* H4 e# U
* </mvc:interceptors> 5 {4 i+ k- j g3 s* s( a. ~
*" E/ E# T" Y( C/ [( k
' e! H1 s4 L, d* R, q处理流程
+ M& D( M' x! V/ U" I
0 v% O& k0 u' y5 B+ F( `* M1请求沿着拦截器①--拦截器②…拦截器N的preHandle方法执行,最终到达控制器
! v, q6 b8 I/ C3 d% C9 d4 I. l" ]! x R/ R v5 \
2在控制器执行完毕,将要生成视图之前依次执行拦截器N--拦截器N-1….拦截器②---拦截器①中的postHandle方法。 ) u* G% D& n9 b& n9 A
*
; `. z# Y W/ u9 W$ l*/
. G8 T" Y# w* w; Q. E0 k" ?2 V# ?' P4 j1 D6 \( o3 p
|
|