拦截器
拦截器与过滤器的区别
filter:filter,是javaEE 提供的用来拦截请求的,所有请求都能拦截
interceptor:只能拦截控制器DispatcherServlet的方法,让处理器Handler接收不到方法
interceptor拦截器的使用方法
实现HandlerInterceptor接口
覆盖重写方法
prehandle方法的返回值true为放行,false为拦截
配置拦截器
Demo01Interceptor实现一个接口HandlerInterceptor
//1:实现一个接口HandlerInterceptor
public class Demo01Interceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle");
return true;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
接口的三个方法的执行顺序
多个拦截器的执行顺序(了解)
springmvc.xml
按照配置的顺序来进行拦截
<!--拦截器使用第二步:配置拦截器-->
<mvc:interceptors>
<!--用于测试的拦截器-->
<mvc:interceptor>
<!--拦截路径的配置-->
<mvc:mapping path="/demo05.action"/>
<bean id="interceptor1" class="com.wzx.interceptor.Demo01Interceptor"/>
</mvc:interceptor>
<mvc:interceptor>
<!--拦截路径的配置-->
<mvc:mapping path="/demo05.action"/>
<bean id="interceptor2" class="com.wzx.interceptor.Demo02Interceptor"/>
</mvc:interceptor>
<mvc:interceptor>
<!--拦截路径的配置-->
<mvc:mapping path="/demo05.action"/>
<bean id="interceptor3" class="com.wzx.interceptor.Demo03Interceptor"/>
</mvc:interceptor>
</mvc:interceptors>
通配符 *
/** 任意目录,任意地址
案例练习
像有些网站必须登录才能看到里面的内容,没有登录的强制跳转到登录页面
springmvc.xml
<!--拦截器使用第二步:配置拦截器-->
<mvc:interceptors>
<!--用于测试的拦截器-->
<mvc:interceptor>
<!--拦截路径的配置-->
<mvc:mapping path="/**"/>
<bean id="interceptor1" class="com.wzx.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
LoginInterceptor
//1:判断一下路径,如果访问的是order address..判断是否登录 未登录强制到登入页面
public class LoginInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("LoginInterceptor preHandle------------------------");
User user = (User) request.getSession().getAttribute("user");
if(user == null){
String address = request.getRequestURI();
System.out.println("address = "+address);
if(address.contains("order")||address.contains("address")){
String contextPath=request.getContextPath();
response.sendRedirect(contextPath+"/login.jsp");
//强制到登录页面
return false;
}
}
return true;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("LoginInterceptor postHandle------------------------");
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("LoginInterceptor afterCompletion------------------------");
}
}
OrderController
@Controller
@RequestMapping("/order")
public class OrderController {
@RequestMapping(path = "/query.action",method = {
RequestMethod.GET,RequestMethod.POST})
public String query(Integer id){
System.out.println("你访问了我的订单功能 ");
return "order";
}
}