SpringMVC拦截器_老师查看班级的成绩

SpringMVC拦截器

案例驱动:上京东的时候,能否直接看到购物车中的内容?必须要先登录,才能看见!
只有用户登录的时候才能进行数据查看!【老师要查看班级的考试成绩】


1.创建一个拦截器 实现 implementsHandlerInterceptor

package com.bjsxt.interceptor;

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.ModelAndView;

 

/**

* @ClassName:MyInterceptor

* @Description:要实现HandlerInterceptor

* @authormengqx

* @date 2017714

*/

 

public class MyInterceptor implements HandlerInterceptor {

    /**

     * 执行完postHandle,才会执行afterCompletion

     */

    @Override

    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)

            throws Exception {

        System.out.println("afterCompletion");

    }

 

    /**

     * 如果preHandle返回true,则会执行postHandle方法。

     */

    @Override

    public void postHandle(HttpServletRequest arg0, HttpServletResponsearg1, Object arg2, ModelAndViewarg3)

            throws Exception {

        System.out.println("postHandle");

       

    }

    /**

     * preHandle 请求到达controller之前。

     */

    @Override

    public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {

        // TODO Auto-generated method stub

        System.out.println("preHandle");

// return false;拦截 true:不拦截,放行。只能返回true的时候,才会去执行后面的方法。

        return fasle;

    }

}

 

2.在springmvc核心配置文件中添加配置!

<!-- 配置拦截器 -->

<mvc:interceptors>

    <mvc:interceptor>

    <!-- 拦截的路径 -->

       <mvc:mappingpath="/show"/>

       <!-- 配置一个拦截器配置一个class -->

       <beanclass="com.bjsxt.interceptor.MyInterceptor"></bean>

    </mvc:interceptor>

</mvc:interceptors>


3.单拦截器执行的顺序

3.1 先去执行preHandle,然后执行Controller,接着postHandle,再去view返回视图,最后afterCompletion。
注:preHandle 第三个参数Object args :args 表示要拦截的方法名。

public java.lang.String com.bjsxt.controller.UserController.show();

afterCompletion 第四个参数 Exception exception :exception表示异常对象!


4.去实现要先登录,才能查看!

Login.jsp

<formaction="login"method="post">

       <inputtype="text"name="name"/><br>

       <inputtype="password"name="pwd"/><br>

       <inputtype="submit"value="login"/><br>

    </form>

login@controller

@RequestMapping("login")

    public String login(HttpSessionsession, String name,Stringpwd){

           System.out.println(name);

           System.out.println(pwd);

           //  将用户名存到session

           if ("admin".equals(name)) {

              session.setAttribute("username",name);

              return"listScore";

           }else{

              return"login";

           }

    }

 

实际开发中应该存储User 对象

    @RequestMapping("login")

    public String login(HttpSessionsession, User user){

           //  将用户名存到session

           if ("admin".equals(user.getName())) {

              //  正常来说登录成功之后,应该存储User对象!

              session.setAttribute("username",user);

              return"listScore";

           }else{

              return"login";

           }

    }

 

look@Controller

@RequestMapping("look")

    @ResponseBody

    public List<Scores> look(){

//     用来模拟数据库存储学生成绩

       List<Scores> list = new ArrayList<>();

       list.add(new Scores(1,"高圆圆", 100));

       list.add(new Scores(2,"唐嫣", 99));

       list.add(new Scores(3,"宋慧乔", 99));

       list.add(new Scores(4,"马蓉", 38));

       list.add(new Scores(5,"范爷", 100));

       list.add(new Scores(6,"陈乔恩", 100));

       returnlist;

    }


拦截器

@Override

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Objectarg2) throws Exception {

        System.out.println("preHandle");

        // 先取得值!如果登录了,则会有值,并且还要将值存储到session中。session中取得值。

        // 取得到url的地址相当于取得到 http://localhost:8080/08springmvc/login地址

        String url = request.getRequestURI();

        System.out.println(url);

        if (url.endsWith("login")) {

            return true;

        }

        // 取得session中的值。如果没有则不放行!

        String username = (String)request.getSession().getAttribute("username");

        if (username !=null) {

            return true;

        }

        // 如果全部都是false,则继续登录

        request.getRequestDispatcher("login.jsp").forward(request,response);

        return false;

    }


Springmvc核心配置文件

<!-- 配置拦截器 -->

<mvc:interceptors>

    <mvc:interceptor>

    <!-- 拦截的路径 /**表示拦截所有请求  拦截的时候,path一定要有 /-->

       <mvc:mappingpath="/**"/>

       <!-- 配置一个拦截器配置一个class -->

       <beanclass="com.bjsxt.interceptor.MyInterceptor"></bean>

    </mvc:interceptor>

</mvc:interceptors>


可以在springmvc核心配置文件中设置不被拦截的路径。

<!-- 配置拦截器 -->

<mvc:interceptors>

    <mvc:interceptor>

    <!-- 拦截的路径 /**表示拦截所有请求  拦截的时候,path一定要有 /-->

        <mvc:mappingpath="/**"/>

        <!-- 哪些路径不被拦截,通常我们的登录,首页时不被拦截的 -->

        <mvc:exclude-mappingpath="/login"/>

        <!-- 配置一个拦截器配置一个class -->

        <beanclass="com.bjsxt.interceptor.MyInterceptor"></bean>

    </mvc:interceptor>

</mvc:interceptors>

注意:bean标签应该放在mvc标签的下面!


5多个拦截器执行的顺序

执行顺序:跟谁有关系!配置拦截器的顺序有关系!

1-pre,2-pre @controller 2-post ,1-post view2-after,1-after

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值