【Spring MVC:拦截器】 介绍,简例,登陆权限拦截

学习自:https://www.bilibili.com/video/BV1aE41167Tu?p=27

拦截器

一、介绍

在这里插入图片描述

二、自定义拦截器

实例1—简例

1、控制器

@RestController
public class MyController {
    @RequestMapping("i1")
    public String i1() {
        System.out.println("=====执行方法i1=====");
        return "ok";
    }
}

2、自定义拦截器,必须实现 HandlerInterceptor 接口。我们平时基本只用 preHandle() 方法,因此可不必实现另外两个方法(而且已有默认实现),此处只是测试

public class MyInterceptor implements HandlerInterceptor {

    //return true 为放行,return false 直接拦截
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("------------处理前------------");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("------------处理后------------");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("------------清理------------");
    }
}

3、spring-mvc.xml 中配置拦截器

<!--拦截器配置-->
<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <bean class="com.zlc.interceptor.MyInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

请求成功
在这里插入图片描述
在这里插入图片描述

实例2—登录权限拦截

index.jsp
在这里插入图片描述
login.jsp
在这里插入图片描述
success.jsp
在这里插入图片描述
控制器

@Controller
@RequestMapping("/user")
public class UserController {
    //跳转到登陆页面
    @RequestMapping("/goLogin")
    public String jumpLogin() {
        return "login";
    }

    //跳转到成功页面
    @RequestMapping("/jumpSuccess")
    public String jumpSuccess() {
        return "success";
    }

    //登陆提交
    @RequestMapping("/login")
    public String login(HttpSession session, String username, String pwd) {
        // 向session记录用户身份信息
        System.out.println("接收前端===" + username);
        session.setAttribute("user", username);
        return "success";
    }

    //退出登陆
    @RequestMapping("/logout")
    public String logout(HttpSession session) {
        // session 过期
        session.invalidate();
        return "login";
    }
}

拦截器

public class LoginInterceptor implements HandlerInterceptor {
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
        // 如果是登陆页面则放行
        System.out.println("url: " + request.getRequestURI());
        if (request.getRequestURI().contains("ogin")) {
            return true;
        }
        HttpSession session = request.getSession();
        // 如果用户已登陆也放行
        if (session.getAttribute("user") != null) {
            return true;
        }
        // 用户没有登陆跳转到登陆页面
        request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
        return false;
    }
}

测试
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

超周到的程序员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值