SpringMVC---拦截器

SpringMVC—拦截器

  1. 拦截器配置
  2. 第一个拦截器
  3. 练习

拦截器的配置

<!--    拦截器配置-->
    <mvc:interceptors>
<!--        第一个拦截器-->
        <mvc:interceptor>
            <mvc:mapping path="/**"/>   <!--拦截位置/**代表所有-->
            <bean class="Mr_xiao.interceptor.HelloInterceptor" /><!--拦截器的位置-->
        </mvc:interceptor>
    </mvc:interceptors>

第一个拦截器

HelloInterceptor.java 继承接口HanderInterceptor重写三个方法

/**
 * 第一个拦截器
 * 拦截位置在哪?
 * 怎么放行or不放行?
 */
public class HelloInterceptor implements HandlerInterceptor {
    //拦截前执行     返回true继续执行,返回false终止执行
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截前运行"+handler);
        return true;
    }
    //此方法可以进一步更改视图模型(拦截进行中)
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("拦截进行中"+handler);
//        modelAndView.addObject("lol","edg   WINNER");
//        modelAndView.setViewName("404Error");
    }
    //视图渲染结束后执行(拦截后执行)
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("拦截后运行"+handler);
    }
}

练习

Login控制器 session LOGIN=admin
Game控制器 “你正在玩英雄联盟”
拦截器 检查LOGIN有没有?? 有—》放行 没----》login.jsp

创建登陆拦截器loginInterceptor

public class LoginInterceptor implements HandlerInterceptor {
    //拦截前执行     返回true继续执行,返回false终止执行
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Object uname=request.getSession().getAttribute("login");
        System.out.println("uname="+uname);
        if(uname==null||uname.equals("")){
            response.sendRedirect("login.jsp");
            return false;
        }else {
            return true;
        }
    }
    //此方法可以进一步更改视图模型(拦截进行中)
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("我要去打游戏咯~");
    }
}

login.jsp

<form action="login" method="post">
        用户名:<input type="text" name="uname" required><br/>
        密码:<input type="password" name="upwd">
        <input type="submit" value="Login">
    </form>
    <h2><a href="clearlogin">退出登陆</a> </h2>
    <h2><a href="begingame">开始游戏</a> </h2>

实现类

@Controller
@SessionAttributes({"login"})
public class LoginController {
    @RequestMapping("/login")
    public String login(String uname, String upwd, ModelMap map){
        System.out.println("用户名:"+uname);
        System.out.println("密码:"+upwd);
        map.put("login","admin");
        return "success";		//登陆成功自己控制跳转到哪
    }
    @RequestMapping("/begingame")
    public String begingame(){
        System.out.println("开启我的游戏之旅....");
        return "success";
    }
    @RequestMapping("/clearlogin")
    public String clearlogin(SessionStatus ss){
        System.out.println("退出登录....");
        ss.setComplete();
        return "redirect:login.jsp";
    }
}

最终测试结果看控制台信息即可
还有不要忘了配置拦截器

 <mvc:interceptors>
<!--        登陆拦截器-->
        <mvc:interceptor>
            <mvc:mapping path="/begingame"/>
            <bean class="Mr_xiao.interceptor.LoginInterceptor" />
        </mvc:interceptor>
    </mvc:interceptors>

总结

  • 多个拦截器执行流程
  • A1 A2 A3          B1 B2 B3
    A1 --> B1—> 控制器 —>B2 —>A2—>B3 —A3
  • 配置拦截器关键语句
<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="需要拦截的范围"/>
        <mvc:exclude-mapping path="不拦截的范围"/><!--不拦截的范围-->
        <bean class="拦截器路径" />
    </mvc:interceptor>
</mvc:interceptors>
  • 拦截器继承接口HandlerInterceptor
  • 拦截器重写的三个方法
  • 方法一://拦截前执行 返回true继续执行,返回false终止执行
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {}
    方法二: //此方法可以进一步更改视图模型(拦截进行中)
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {}
    方法三://视图渲染结束后执行(拦截后执行)
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {}



    🆗了------------------------------------------------------------------------------------------------------------->>>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

碰磕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值