springMVC 拦截器

为什么使用拦截器:

springMVC拦截器的作用类似于servlet的过滤器作用,SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理。 比如通过它来进行权限验证,或者是来判断用户是否登陆(这里的登录验证就如同servlet里的MVC内容)

创建一个拦截器类 该类的url和指定的某个Controller的是一致的 利用注解@RequestMapping(“”)进行路径配置,比起在springMVC-servlet.xml里进行,简便许多。为什么要设置为同一个url,这样才便于对于这个controller所接收的请求进行拦截处理。

拦截器类:

在业务处理器处理请求之前被调用
* 如果返回false
* 从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链
* 如果返回true
* 执行下一个拦截器,直到所有的拦截器都执行完毕
* 再执行被拦截的Controller
* 然后进入拦截器链,
* 从最后一个拦截器往回执行所有的postHandle()
* 接着再从最后一个拦截器往回执行所有的afterCompletion()
*

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
@RequestMapping("/index")
public class interceptor extends HandlerInterceptorAdapter {

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler) throws Exception{

        System.out.println("preHandle(),在访问Controller之前被调用");
        return true;
    }

    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception{
        System.out.println("postHandle(),在访问Controller之后,访问视图之前被调用,这里可以注入一个时间到modelAndView中,用于后续视图显示");
        modelAndView.addObject("date","由拦截器生成的时间:"+new Date());//在业务处理器处理请求执行完成后,生成视图之前执行的动作   
     * 可在modelAndView中加入数据,比如当前时间 
    }

    public void afterCompletion(HttpServletRequest request,HttpServletResponse response,Object handle,Exception ex)throws Exception{
//在DispatcherServlet完全处理完请求后被调用,可用于清理资源等  
     *  
     * 当有拦截器抛出异常时,会从当前拦截器往回执行所有的拦截器的afterCompletion()  
        System.out.println("afterCompletion(), 在访问视图之后被调用");
    }
}

controller:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Controller
public class MyController {
    @RequestMapping("/index")
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        //ModelAndView 模型和视图
        ModelAndView mv = new ModelAndView("index.jsp");

        //封装对象,放在ModelAndView中。Model
        mv.addObject("message","HelloSpringMVC!");
        //封装要跳转的视图,放在ModelAndView中

        return mv;
    }
}

在这里插入图片描述
在这里插入图片描述
特殊功能的类一般都需要在.xml进行配置:
配置拦截器

<mvc:interceptors>   
        <mvc:interceptor>   
            <mvc:mapping path="/index"/> 
             
            <bean class="interceptor.IndexInterceptor"/>     
        mvc:interceptor> 
         
    mvc:interceptors> 

你可能感兴趣的:(MVC,spring,SpringMVC)