• springmvc自定义的拦截器以及拦截器的配置


    一、自定义拦截器

    Spring MVC也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerInterceptor接口。

    二、HandlerInterceptor接口的三个方法

    1.preHandler():

    此方法在业务处理器(Controller)处理请求之前被调用。在此方法中可以对用户请求request进行处理。

    若返回值为true,则继续调用后续的拦截器和目标方法。若返回值为false,则不会再调用后续的拦截器和目标方法。

    * 常用来做权限。日志,事务等。

    2.postHandler():

    此方法在业务处理器处理完请求后,在DispatcherServlet向客户端返回响应前(调用目标方法之后,渲染视图之前)被调用,在该方法中对用户请求request进行处理。

    * 常用来对请求域中的属性或视图做出修改。

    3.afterCompletion():

    此方法在DispatcherServlet完全处理完请求后被调用

    * 常用来做资源释放

     三、拦截器和过滤器在执行先后顺序图:

    四、拦截器使用举例

    用户登录状态检查例子:通过用户发送的请求,判断用户是否登录,若未登录则不允许访问被保护资源

    步骤:

    1.创建拦截器类

    一般拦截器类直接实现HandlerInterceptor接口,重写HandlerInterceptor接口的三个方法就可以了,

    但由于此处只需要用到 HandlerInterceptor接口的preHandler()方法,所以我们可以选择继承HandlerInterceptor接口的抽象实现类HandlerInterceptorAdapter,重写其中的preHandler()方法。

    在preHandler()方法中我们只需要从session中查询用户信息是否为null,就可以知道用户是否已登录了。

    public class LoginInterceptor extends HandlerInterceptorAdapter {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            HttpSession session = request.getSession();
            Admin admin = (Admin) session.getAttribute("loginAdmin");
            if (admin == null){
                throw new AccessForbiddenException("请登录后再访问!");
            }
            return true;
        }
    }

    2.注册拦截器

    在web.xml中注册拦截器,配置需要拦截和不需要拦截的请求

    <!--注册拦截器-->
        <mvc:interceptors>
            <mvc:interceptor>
                <!--mvc:mapping配置要拦截的资源-->
                <!-- /* 对应一层路径,比如:/aaa -->
                <!-- /** 对应多层路径,比如:/aaa/bbb 或 /aaa/bbb/ccc 或 /aaa/bbb/ccc/ddd-->
                <mvc:mapping path="/**"/>
                <!--mvc:exclude- mapping配置不拦截的资源-->
                <!--去登陆页面,不拦截-->
                <mvc:exclude-mapping path="/admin/to/login/page.html"/>
                <!--执行登陆操作,不拦截-->
                <mvc:exclude-mapping path="/admin/do/login.html"/>
                <!--执行退出登录操作,不拦截-->
                <mvc:exclude-mapping path="/admin/do/Logout.html"/>
                <bean id="loginInterceptor" class="com.atguigu.crowd.mvc.interceptor.LoginInterceptor"></bean>
            </mvc:interceptor>
        </mvc:interceptors>
  • 相关阅读:
    2015年终总结
    mmzb游戏事故分析
    为sproto手写了一个python parser
    Lua小技巧
    Techparty-广州 10 月 31 日 Docker 专场沙龙 后记
    1password密码库格式更新
    SSL加密与系统时间
    webpack的学习使用三
    webpack的学习使用二
    webpack的学习使用一
  • 原文地址:https://www.cnblogs.com/bear7/p/13390202.html
Copyright © 2020-2023  润新知