您的位置:首页 > 编程语言 > Java开发

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

2017-09-14 11:06 369 查看

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 2017年7月14日
*/
 
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: