最近在学习拦截器,没想到刚开始就碰到难题了。我明明配置好了拦截器,但是丝毫没有起作用,百思不得其解。
这是起初的配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<
context:component-scan
base-package
=
"sin.cara.controller"
/>
<
mvc:annotation-driven
/>
<
bean
class
=
"org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"
>
<
property
name
=
"interceptors"
>
<
list
>
<
ref
bean
=
"myInterceptor"
/>
</
list
>
</
property
>
</
bean
>
<
bean
id
=
"myInterceptor"
class
=
"sin.cara.interceptors.MyInterceptors"
/>
<
bean
id
=
"viewResolver"
class
=
"org.springframework.web.servlet.view.InternalResourceViewResolver"
>
<
property
name
=
"prefix"
value
=
"/WEB-INF/views"
/>
<
property
name
=
"suffix"
value
=
".jsp"
/>
</
bean
>
|
这是修改后的配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<
context:component-scan
base-package
=
"sin.cara.controller"
/>
<
bean
class
=
"org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"
>
<
property
name
=
"interceptors"
> <
list
> <
ref
bean
=
"myInterceptor"
/> </
list
>
</
property
>
</
bean
>
<
bean
id
=
"myInterceptor"
class
=
"sin.cara.interceptors.MyInterceptors"
>
</
bean
>
<
bean
class
=
"org.springframework.web.servlet.view.InternalResourceViewResolver"
>
<
property
name
=
"prefix"
value
=
"/WEB-INF/views/"
/>
<
property
name
=
"suffix"
value
=
".jsp"
/>
</
bean
>
|
细心的看官也许发现了不同之处,是的,少了
1
|
<
mvc:annotation-driven
/>
|
居然可以成功拦截。
原因是因为
1
|
<
mvc:annotation-driven
/>
|
会自动为我们注册DefaultAnnotationHandlerMapping 与AnnotationMethodHandlerAdapter 这两个bean。所以第一种配置无法注入 interceptors属性,就不能指定拦截器。
当使用这种配置时
1
2
3
|
<
mvc:interceptors
>
<
bean
class
=
"sin.cara.interceptors.MyInterceptors"
/>
</
mvc:interceptors
>
|
使不使用
1
|
<
mvc:annotation-driven
/>
|
都没关系,都会成功拦截。