zoukankan      html  css  js  c++  java
  • 第八天: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思想的一种体现。 开发中拦截器可以单独使用,也可以同时使用多个拦截器形成一条拦截器链。

  • 相关阅读:
    sdut1282Find the Path (floyd变形)
    sdut1933WHUgirls(dp)
    二分图入门题集
    Codeforces Round #230 (Div. 1)
    PHP中关于 basename、dirname、pathinfo 详解
    nginx php mysql日志配置
    确保 PHP 应用程序的安全 -- 不能违反的四条安全规则
    mysql日期时间处理
    mysql索引类型和索引方法
    php Redis函数使用总结(string,hash,list, set , sort set )
  • 原文地址:https://www.cnblogs.com/masterhxh/p/13859496.html
Copyright © 2011-2022 走看看