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>

上一篇:/ /* /**的区别


下一篇:numpy数组的创建