SpringMVC拦截器
1.使用场景
解决请求的共性问题(比如:乱码问题,权限验证问题等)
2.原理
与过滤器类似
3.实现
(1)编写拦截器类,实现HandlerInterceptor接口
package com.xiao.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 拦截器
*/
public class MyInterceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception arg3)
throws Exception {
}
@Override
//ModelAndView arg3可以来改变显示的视图,或修改发往视图的的方法
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler, ModelAndView arg3)
throws Exception {
}
@Override
//Object handler表示被拦截的请求的目标对象
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//解决乱码
request.setCharacterEncoding("utf-8");
//对用户登录进行拦截
if(request.getSession().getAttribute("user") == null){
//如果没有登录,就终止请求,并发送到登录页面
request.getRequestDispatcher("login.jsp").forward(request,response);
return false;
}
return true;
}
}
(2)将拦截器注册到springMVC框架中
<mvc:interceptors>
<!-- 拦截所有资源 -->
<bean class="com.xiao.interceptor.MyInterceptor"/>
</mvc:interceptors>
(3)配置拦截器规则
<mvc:interceptors>
<!-- 拦截所有资源 -->
<bean class="com.xiao.interceptor.MyInterceptor"/>
*<mvc:interceptor>
<!-- 拦截制定资源 -->
<mvc:mapping path="/dv/**"/>
<bean class="com.xiao.interceptor.MyInterceptor"/>
</mvc:interceptor>*
</mvc:interceptors>
4.配置多个拦截器
注意多个拦截器的拦截流程。(从北京到上海过收费站的流程)
5.拦截器的其他实现方法
实现WebRequestInterceptor接口(无返回值),注册写法不变