作用:

拦截器只能拦截controller中的方法

 

一  编写拦截器(可以编写多个拦截器,链式嵌套执行)必须实现HandlerInterceptor并ctor+o 重写三个方法

package cn.lgy.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 {
    /**
     * 拦截器预处理,在controller方法之前处理
     * 如果为ture则执行下一个拦截器,如果没有下一个拦截器,就执行controller方法
     * 如果为false,则被拦截,不执行controller方法,直接用request或response跳转页面,提示没有访问权限
   * 在于处理中进行逻辑判断,比如判断有没有登录. *
@param request * @param response * @param handler * @return * @throws Exception */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("预处理执行"); // 如果预处理返回为fals则自定义转发响应页面,不执行controller方法 // request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(request,response); return true; } /** * 这是拦截器后处理,在conroller方法执行后执行 * @param request * @param response * @param handler * @param modelAndView * @throws Exception */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("后处理页面执行了"); // 执行完controller方法后可以自定义跳转页面,这样就不会跳转到controller方法的路径, // 但controller方法执行了. request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(request,response); } /** * 该方法在请求处理完成,页面响应之后执行 * @param request * @param response * @param handler * @param ex * @throws Exception */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("最后执行了"); } }

二  配置拦截器(在springmvc.xml中配置),有多个自定义拦截器,就配置多个

<!--配置拦截器,可配置多个-->
    <mvc:interceptors>
        <!--配置一个拦截器-->
        <mvc:interceptor>
            <!--要拦截的具体方法-->
            <mvc:mapping path="/user/*"/>
            <!--不拦截的方法,和<mvc:mapping path=""/>只用配置一个-->
            <!--<mvc:exclude-mapping path=""/>-->
            <!--配置拦截器对象,并注入IOC容器-->
            <bean id="myInterceptor" class="cn.lgy.interceptor.MyInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

 

controller中的方法如下:

package cn.lgy.controller;

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

@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/testInterceptor")
    public String testException()throws Exception{
        System.out.println("testInterceptor");
        return "success";
    }
}

 

posted on 2020-08-15 16:36  ¥简竹¥  阅读(122)  评论(0编辑  收藏  举报