SpringMVC拦截器+举例

拦截器和过滤器的功能比较类似,有以下区别:

        过滤器是 Servlet 规范的一部分,任何框架都可以使用过滤器技术;
        拦截器是 SpringMVC 框架独有的

        过滤器配置了 /*,可以拦截任何资源;
        拦截器只会对控制器中的方法进行拦截

1,自定义拦截器,需要实现 HandlerInterceptor 接口。

public class PrivilegeInterceptor implements HandlerInterceptor {
    /**
     * 预处理,controller 方法执行前
     * 应用:用于身份认证、身份授权
     * return true 放行,执行下一个拦截器,如果没有,执行 controller 中的方法
     * return false 不放行,即不向下执行
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle");
        return true;
    }

    /**
    * 后处理方法,controller 方法执行后,方法跳转 success.jsp 执行之前
    * 应用:从modelAndView出发:将公用的模型数据(比如菜单导航)在这里传到视图,也可以在这里统一指定视图
    */
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle");
    }

    /**
    * success.jsp 页面执行后,该方法会执行
    * 应用:统一异常处理,统一日志处理
    */
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion");
    }
}

2,在 springmvc.xml 中配置拦截器

<!-- 配置权限拦截器 -->
    <mvc:interceptors>
        <mvc:interceptor>
<!--配置对那些资源进行拦截-->
            <mvc:mapping path="/**"/>
<!--配置对哪些资源解除拦截操作-->
            <mvc:exclude-mapping path="/user/login"/>
            <bean class="com.itheima.interceptor.PrivilegeInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

举例:对未登录用户进行拦截

public class PrivilegeInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //判断是否登录——session有没有user
        HttpSession session = request.getSession();
        User user = (User) session.getAttribute("user");
        if(user==null){
            response.sendRedirect(request.getContextPath()+"/login.jsp");
            return false;
        }
        //放行  访问目标资源
        return true;
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值