zoukankan      html  css  js  c++  java
  • 第九讲:拦截器理解 登录拦截器实现

    1、拦截器概念和Struts2一致

    2、实现拦截器(程序是先执行dispatcherServlet,然后执行拦截器,然后执行controller的)

      a) 实现HandleInterceptor接口,(实现它的三个方法,注意三个方法分别在什么时候执行)

    public class MyInterceptor implements HandlerInterceptor{
            //在dispatcherServlet处理后执行   做清理工作
        @Override
        public void afterCompletion(HttpServletRequest arg0,
                HttpServletResponse arg1, Object arg2, Exception arg3)
                throws Exception {
        }
            //在请求处理的方法之后执行,处理后看方法的参数也可以改变它的modelandview
        @Override
        public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
                Object arg2, ModelAndView arg3) throws Exception {
            System.out.println("--------处理后-----------");
        }
            //在请求处理的方法之前执行(比喻登录,要在登录方法之前执行)
            //如果返回true执行下一个拦截器,如果返回false那么不执行下一个拦截器
        @Override
        public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1,
                Object arg2) throws Exception {
            System.out.println("---------处理前----------");
            return true;    //返回false,只会在controller执行前执行,后面就没有后续的动作了
        }
    }上面的代码

      b) 配置拦截器

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:p="http://www.springframework.org/schema/p"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd">
        <!-- 配置渲染(解析)器 -->
        <!-- 注解扫描,自动扫描这个包下面的注解 -->
        <context:component-scan base-package="cn.sxt.controller"></context:component-scan>
        
        <!-- 拦截器的配置,interceptors表示可以配置多个拦截器 拦截器相比filter可以拦截的更加细腻一些-->
        <mvc:interceptors>
            <!-- 表示具体的某一个拦截器 -->
            <mvc:interceptor> 
                <!-- path表示可以拦截指定的一个url /**表示包括路径及其子路径-->
                <!-- 如果是/admin/*-拦截的是/admin/add,/admin/list etc.(etc是等等的意思)/admin/user/sdd不会拦截-->
                <!--  24 如果是/admin/**拦截》上面的都可以拦截,拦截路径及其子路径-->
                <mvc:mapping path="/**"/> 
                <!-- bean其实配置的就是拦截器 -->
                <bean class="cn.sxt.interceptor.MyInterceptor"></bean> 
            </mvc:interceptor>
        </mvc:interceptors>
    </beans>
    上面的代码

    3、问题一:如果被拦截----能否到达指定的页面

    使用HttpServletResponse或者HttpServletRequest可以实现重定向

    controller执行之前经过拦截器的一个方法的执行代码
    //在请求处理的方法之前执行(比喻登录,要在登录方法之前执行) //如果返回true执行下一个拦截器,如果返回false那么不执行下一个拦截器 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("---------处理前----------"); response.sendRedirect(request.getContextPath()+"/index.jsp"); return true; //返回false,只会在controller执行前执行,后面就没有后续的动作了 }

    4、问题二:实现登录拦截器(拦截器的应用)

    配置

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:p="http://www.springframework.org/schema/p"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd">
        <!-- 配置渲染(解析)器 -->
        <!-- 注解扫描,自动扫描这个包下面的注解 -->
        <context:component-scan base-package="cn.sxt.controller"></context:component-scan>
        
        <!-- 拦截器的配置,interceptors表示可以配置多个拦截器 拦截器相比filter可以拦截的更加细腻一些-->
        <mvc:interceptors>
            <!-- 表示具体的某一个拦截器 -->
            <mvc:interceptor> 
                <!-- 这里不配置,默认就是所有都被拦截 -->
                <!-- 不仅有这种标签,还有除了那个不拦截外,其它都拦截标签mvc:exclude-mapping -->
                <mvc:mapping path="/**"/> 
                <!-- bean其实配置的就是拦截器 -->
                <bean class="cn.sxt.interceptor.LoginInterceptor">
                    <property name="allowedPass">
                        <list>
                            <value>login.do</value>
                            //<value>add.do</value>
                        </list>
                    </property>
                </bean> 
            </mvc:interceptor>
        </mvc:interceptors>
    </beans>

     !!!此次测试后面不成功,启动报错

  • 相关阅读:
    负载、系统oracle 系统调优之 利用CPUby小雨
    进程、检查oracle 性能调优 解决CPU问题by小雨
    数据、保存【sqlite】——使用记录by小雨
    MySQL中间变量的用法by小雨
    函数、返回Sql Server常用函数之统计、算数、字符串函数by小雨
    数据库、实体数据库设计原则by小雨
    查看、设置centos下在线安装配置mysqlby小雨
    重启、无效Oracle使用raw via lvmby小雨
    总线、虚拟机VMware 创建虚拟机的磁盘操作by小雨
    驱动、数据库Java HIVE 使用Jdbc连接Hiveby小雨
  • 原文地址:https://www.cnblogs.com/djlindex/p/11305957.html
Copyright © 2011-2022 走看看