拦截器的目的就是:用户所属的session不存在后进行对控制器请求的拦截,使跳转到首页或者登陆页面。
1、首先在web.xml中配置dispatcher-servlet.xml 。代码中对应的<servlet-name>中的dispatcher 映射的就是dispatcher-servlet.xml文件
1
2
3
4
5
6
7
8
9
10
|
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet- class >org.springframework.web.servlet.DispatcherServlet</servlet- class >
<load- on -startup>1</load- on -startup>
</servlet>
<!-- springmvc 请求后缀 -->
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*. do </url-pattern><!-- 拦截所有以. do 结尾的请求,交于DispatcherServlet处理 -->
</servlet-mapping>
|
2、在dispatcher-servlet.xml 文件中配置拦截器需要拦截的目录,其中处理拦截的具体实现类的在第三步新建,对应的包路径需要修改。
1
2
3
4
5
6
7
8
9
10
11
12
|
<!-- 配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 拦截器拦截的URL格式 -->
<mvc:mapping path= "/*.do" ></mvc:mapping>
<!-- 拦截器不拦截的controller -->
<mvc:exclude-mapping path= "/toLogin.do" >
<mvc:exclude-mapping path= "/login.do" >
<!-- 处理拦截的具体实现类 包路径为src下目录路径-->
<bean class = "com.springmvc.interceptor.LoginInterceptor" ></bean>
</mvc:exclude-mapping></mvc:exclude-mapping></mvc:interceptor>
</mvc:interceptors>
|
3、新建拦截器具体实现类,注意拦截器的具体实现类继承自类HandlerInterceptorAdapter。
1
|
preHandle->postHandle->afterCompletion,这三个方法是依次执行的
|
preHandle():这个方法在业务处理器处理请求之前被调用,在该方法中对用户请求request进行处理。如果程序员决定该拦截器对请求进行拦截处理后还要调用其他的拦截器,或者是业务处理器去进行处理,则返回true;如果程序员决定不需要再调用其他的组件去处理请求,则返回false。
postHandle():这个方法在业务处理器处理完请求后,但是DispatcherServlet向客户端返回请求前被调用,在该方法中对用户请求request进行处理。
afterCompletion():这个方法在DispatcherServlet完全处理完请求后被调用,可以在该方法中进行一些资源清理的操作。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
public class LoginInterceptor extends HandlerInterceptorAdapter {
// 继承HandlerInterceptorAdapter类
// 重写 preHandle()方法,在业务处理器处理请求之前对该请求进行拦截处理
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
//UserModal user = (UserModal) request.getSession().getAttribute("userInfo");
//if(user == null){
// response.sendRedirect("/toLogin.do");
// return false;
// } 这是对登录的拦截,获取登录是的session,如果获取不到将拦截跳转到登录界面。拦截器的登录应用基本都是对session的应用
return true ;
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object o, ModelAndView mav)
throws Exception {
System.out.println( "----------postHandle" );
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object o, Exception excptn)
throws Exception {
}
}
|
4、拦截器的基本配置基本配置就完成了。