spingMVC拦截器 -单个、多个、设想

springmvc.xml配置

<!-- SPringmvc的拦截器 -->
        <mvc:interceptors>
            <!-- 多个拦截器 -->
            <mvc:interceptor>
            <!-- path="/**"/  拦截所有  在类里处理不需要拦截即放行 -->
                <mvc:mapping path="/**"/>
                <!-- 自定义的拦截器类 -->
                <bean class="com.itheima.springmvc.interceptor.Interceptor1"/>
            </mvc:interceptor>
    <!-- <mvc:interceptor>
                <mvc:mapping path="/**"/>
                自定义的拦截器类
                <bean class="com.itheima.springmvc.interceptor.Interceptor2"/>
            </mvc:interceptor> -->
        </mvc:interceptors>

多个拦截起情况会复杂

  • 单个

    用户-> 
    拦截器( 三个方法 ***方法前***  方法后 页面渲染后)-> 
    controller ->
    拦截器( 三个方法  方法前 ***方法后***  页面渲染后)->
    视图解析器 (jsp 转化html)-> 
    拦截器( 三个方法  方法前 方法后 ***页面渲染后***)->用户
    
  • 多个
    1、全部通过
    方法前1
    方法前2
    方法后2
    方法后1
    页面渲染后2
    页面渲染后1
    2、拦截器1拒绝 2通过
    方法前1
    方法前2
    2、拦截器1通过 2拒绝
    方法前1
    方法前2
    页面渲染后1

拦截类

// true 放行  false 不放行
public class Interceptor1 implements HandlerInterceptor{

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
        // TODO Auto-generated method stub
        System.out.println("方法前 1");
        //判断用户是否登陆  如果没有登陆  重定向到登陆页面   不放行   如果登陆了  就放行了
        // URL  http://localhost:8080/springmvc-mybatis/login.action
        //URI /login.action
        String requestURI = request.getRequestURI();
        // 不是登录的情况不放行要先校验
        if(!requestURI.contains("/login")){
        // 判断是哪个项目 ----------------------在此是否可以实现单站点登录
            String username = (String) request.getSession().getAttribute("USER_SESSION");
            if(null == username){
            // 跳转到其他的页面 。比如不同项目的不同页面
                response.sendRedirect(request.getContextPath() + "/login.action");
                return false;
            }
        }
        return true;
    }
    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
            throws Exception {
        // TODO Auto-generated method stub
        System.out.println("方法后 1");

    }
    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
            throws Exception {
        // TODO Auto-generated method stub
        System.out.println("页面渲染后 1");

    }
}

preHandle、 postHandle 、 afterCompletion暂时用前端的思想理解为生命钩子哈(准不准确就不管了,好理解就行)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值