知识点14--spring boot mvc拦截器

前面知识点提到了自定义mvc配置,但是我们没有另外导入过mvc的包,因为本身就是spring全家桶里面的东西,spring boot也是完成了内置mvc框架
在这里插入图片描述
下面沿用知识点13项目,以一个例子演示mvc拦截器的操作,我们要做的是如果没有的登录,则不允许访问列表页面,注意为了后续的学习想把项目中知识点12的ES相关操作注释掉,不然后面的学习要去开ES服务比较麻烦

第一步:建立拦截器包和拦截器类

在这里插入图片描述

package com.wy.scjg.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 登录拦截器
 */
public class LoginInterceptor implements HandlerInterceptor {
    /**
     *  这个方法触发在请求刚到达后端,处理请求的控制器以及视图解析还未发生作用之前。是我们使用拦截器最常用的一个方法
     *  返回false表示,不通过拦截器,同时你应当准备重定向或者准备相关的返回
     *  返回true则通过拦截器
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器执行了@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
        //获取登录 的信息
        Object user = request.getSession().getAttribute("user");
        //判断登录信息 是否正常
        if(user!=null){
            System.out.println("用户已经登录正常执行");
            return true;
        }else{
            System.out.println("用户没有登录,就转发到登录界面");
            //转发登录界面
            response.sendRedirect("/user/toLogin");
            return false;
        }
    }

    /**
     * 该方法触发在请求已被控制器处理完毕,返回视图之前,不是很常用,通常是用来完善处理器结果的
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    /**
    * 这个方法在控制器视图解析全部完成之后,最后执行,通常用来做一些扫尾工作,基本不用
    */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

第二步:在知识点12中建立的mvc配置类中注册拦截器

package com.wy.scjg.config;

import com.wy.scjg.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
    /**
     * 自定义静态资源方法
     * @param registry
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //自定义静态资源存放地址
        registry.addResourceHandler("/imgs/**")
                .addResourceLocations("file:D://imgs//");
    }

    /**
     * 注册拦截器
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //注册拦截器,除了自定义静态资源,所有页面都需要经过此拦截器
        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/imgs/**","/user/toLogin","/user/login");
    }
}

第三步:在UserController中添加登录控制器,本文做一个伪代码,大家有兴趣可以做全

/**
 * 预登陆
 * @return
 */
@RequestMapping("/toLogin")
public String toLogin(){
    return "user_login";
}

/**
 * 正式登录
 * @param request
 * @param name
 * @return
 */
@RequestMapping("/login")
public String login(HttpServletRequest request,String name){
    request.getSession().setAttribute("user",name);
    //模式时返回一个视图,redirect是返回某个控制器
    return "redirect:/user/list";
}

第四步:准备一个登录界面

<html>
<head>
    <title>用户登录界面</title>
</head>
<body>
  <form action="/user/login" method="post">

      用户名:<input type="text" name="name" value="lisi"/>
      <br/>
      <button>登录</button>
  </form>
</body>
</html>

第五步:运行项目,观察控制台输出

访问/user/list时控制台输出未登录,并跳转到登录页面
在这里插入图片描述
在这里插入图片描述
登录后再次访问成功访问列表页面
在这里插入图片描述
在这里插入图片描述
到此本篇知识点讲解结束,此外 本次整体讲解的spring boot项目已上传github

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值