SpringMVC框架之拦截器(附Demo)

7 篇文章 1 订阅

在上一篇博客SpringMVC框架之处理文件上传(附照片上传Demo)实现了照片上传功能,在此篇博客将实现必须登录之后才能访问页面的功能。

关于Demo源码,直接下载SpringMVC框架之处理文件上传(附照片上传Demo)尾端的源码即可,这是一个简化的Product信息展示的Demo,使用了Spring、SpringMVC、Mybatis框架。

说到拦截器,我的想到的是Java Web三大组件(ServletListener监听器Filter过滤器)中的Filter,而SpringMVC中拦截器的作用与之几乎相同,用于对处理器(处理请求)进行预处理后处理

前面的Demo,无需进行登录即可访问所有页面。
在这里插入图片描述
现在我们完善一下业务逻辑,只有登录过的才能访问页面资源。
本应该在数据库中新建t_user表、新建User实体类、对应的MapperServiceController,不过为了简化逻辑,我们写死只有username="hestyle",password="123456"的账号才能登录。

1、编写UserController控制器

在这里插入图片描述

package cn.hestyle.demo.web.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * description: UserController控制器
 *
 * @author hestyle
 * @version 1.0
 * @className ssm_demo_01->UserController
 * @date 2020-01-31 10:19
 **/
@Controller
@RequestMapping("user")
public class UserController {

    @RequestMapping("login.do")
    public String login(String username, String password, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //SpringMVC会自动注入前端传入的username、password参数
        if ("hestyle".equals(username) && "123456".equals(password)) {
            //假装自己查了下数据库。。。。
            HttpSession session = request.getSession();
            //将登录的用户名放到session中保存
            session.setAttribute("loginUser", username);
            //账号名、密码正确,就重定向到/product/listAll.do
            return "redirect:/product/listAll.do";
        } else {
            request.setAttribute("msg", "用户名或密码不正确!");
            request.getRequestDispatcher("/login.jsp").forward(request, response);
            return null;
        }
    }
}
2、编写login.jsp控制器

在这里插入图片描述

<%--
  Created by IntelliJ IDEA.
  User: hestyle
  Date: 2020/1/31
  Time: 10:32
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户登录</title>
</head>
<body>
    <form action="${pageContext.request.contextPath}/user/login.do" method="post">
        <table border="1">
            <tr>
                <td>用户名</td>
                <td><input type="text" name="username"></td>
            </tr>
            <tr>
                <td>密码</td>
                <td><input type="password" name="password"></td>
            </tr>
            <tr>
                <td colspan="2"><input type="submit" value="登录"></td>
            </tr>
        </table>
    </form>
    <span style="color: red">${msg}</span>
</body>
</html>

在这里插入图片描述

3、编写LoginInterceptor拦截器

在这里插入图片描述

package cn.hestyle.demo.web.interceptor;

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

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

/**
 * description: 登录拦截器
 *
 * @author hestyle
 * @version 1.0
 * @className ssm_demo_01->LoginInterceptor
 * @date 2020-01-31 10:39
 **/
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
        System.out.println("预处理....");
        //如果是登录页面则放行,返回true表示放行,返回false表示拦截
        if(request.getRequestURI().endsWith("login.do")){
            return true;
        }
        HttpSession session = request.getSession();
        //如果用户已登录也放行
        if(session.getAttribute("loginUser") != null){
            return true;
        }
        //用户没有登录重定向到登录页面
        response.sendRedirect(request.getContextPath() + "/login.jsp");
        return false;
    }

    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        System.out.println("未返回视图前 后处理....");
    }

    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        System.out.println("返回视图前  后处理");
    }
}
4、在SpringMVC中配置拦截器

在这里插入图片描述

<!-- 6.配置拦截器-->
<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <bean class="cn.hestyle.demo.web.interceptor.LoginInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>
5、重新部署项目

在这里插入图片描述
会自动跳转到登录页面
在这里插入图片描述
登录账号
在这里插入图片描述
直接跳转到listAll界面
在这里插入图片描述

以上就是SpringMVC框架之拦截器(附Demo)中的主要内容,只要涉及SessionSpringMVC拦截器的运用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值