第八天:SpringMVC拦截器

(一)拦截器的概念

SpringMVC的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),用于对处理器进行预处理和后处理。是可以在action执行前后执行的代码。是我们做web开发时经常用的技术。比如:权限控制、日志等。我们也可以将多个Interceptor连在一起组成Interceptor

可以把拦截器比作是大楼的门卫,它会在你进门之前和离开之前对你进行校验

 

(二)拦截器的使用

1、单个拦截器使用

1)自定义一个类实现HandleInterceptor接口,或者继承HandlerInterceptorAdaptor抽象类。

2实现HandlerInterceptor接口的三个方法:

preHandle() : 在目标方法之前执行,一般用于预处理

postHandle():在目标方法执行之后执行,一般用于后处理

afterCompletion():整个请求处理完毕,在视图渲染完毕时回调,一般用于资源的清理或性能的统计

 

 

 

3在配置文件中注册拦截器

<!--拦截器注册-->

<mvc:interceptors>

<mvc:interceptor>

<!--拦截器拦截的路径

/**的意思是所有文件夹及里面的子文件夹

/*是所有文件夹,不含子文件夹

/web项目的根目录

-->

<mvc:mapping path="/user/**"/>

<!--拦截器类-->

<bean class="com.offcnb.interceptors.DemoInterceptor"/>

</mvc:interceptor>

</mvc:interceptors>

2、拦截器链

开发中拦截器可以单独使用,也可以同时使用多个拦截器形成一条拦截器链。

其开发步骤和单个拦截器是一样的,只不过注册的时候注册多个,注意这里注册的顺序就代表拦截器执行的顺序

<mvc:interceptors>

<mvc:interceptor>

<mvc:mapping path="/user/**"/>

<bean class="com.offcn.interceptors.DemoInterceptor"/>

</mvc:interceptor>

<mvc:interceptor>

<mvc:mapping path="/user/**"/>

<bean class="com.offcn.interceptors.DemoInterceptor1"/>

</mvc:interceptor>

</mvc:interceptors>

 

这个时候需要注意拦截器的执行顺序

 

(三)拦截非法用户案例

1、创建拦截器

public class LoginHandlerIntercepter implements HandlerInterceptor {      

    @Override  

    public void afterCompletion(HttpServletRequest request,  

            HttpServletResponse response, Object arg2, Exception arg3)  

            throws Exception {  

}  

 @Override  

    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,  

            Object arg2, ModelAndView arg3) throws Exception {  

    }  

    @Override  

    public boolean preHandle(HttpServletRequest request, HttpServletResponse arg1,  

            Object arg2) throws Exception {  

           String requestURI = request.getRequestURI();  

             if(requestURI.indexOf("editClientIfo")>0){  

                 //说明处在编辑的页面  

                 HttpSession session = request.getSession();  

                 String username = (String) session.getAttribute("username");  

                 if(username!=null){  

                     //登陆成功的用户  

                     return true;  

                 }else{  

                    //没有登陆,转向登陆界面  

                     request.getRequestDispatcher("/login.jsp").forward(request,arg1);  

                   return false;  

                 }  

             }else{  

                 return true;  

             }  

    }  

}  

2、配置拦截器

<mvc:interceptors>  

      <!-- 配置登陆拦截器 -->  

      <mvc:interceptor>  

          <mvc:mapping path="/**"/>  

          <bean class="com.offcn.interceptor.LoginHandlerIntercepter"></bean>  

      </mvc:interceptor>  

 </mvc:interceptors>  

 

3、创建控制器

@RequestMapping("/clientLogin")  

public String clientLogin(HttpSession httpSession,String username,String password){  

    if(username.equals("yuan")&&password.equals("123456")){  

        //登陆成功  

        httpSession.setAttribute("username",username);  

        return "forward:clientsList.action";  

    }else{  

        //登陆失败  

        return "forward:login.jsp";  

    }  

}  

4、创建登录页面

  <form action="clientLogin" method="post">  

         姓名:<input type="text" name="username"> <br><br>  

         密码:<input type="text" name="password"> <br><br>  

         <input type="submit" value="登陆">  

  </form>  

 

5、创建页面show.jsp

<a href="${pageContext.request.contextPath}/editClientIfo">查看</a>

 

拦截器是Aop思想的一种体现。 开发中拦截器可以单独使用,也可以同时使用多个拦截器形成一条拦截器链。

posted @ 2020-10-22 17:17  master_hxh  阅读(71)  评论(0编辑  收藏  举报