Spring MVC拦截器Interceptor使用(判断用户登录)

news2025/2/12 16:44:18

文章目录

    • 一 概念
    • 二 3步使用
    • 三 HandlerInterceptor接口
    • 四 代码实现

一 概念

Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。
拦截器可以在进入处理器之前做一些操作,或者在处理器完成后进行操作,甚至是在渲染视图后进行操作。

在这里仅仅演示登录的判断

二 3步使用

①创建拦截器类实现HandlerInterceptor接口
②配置拦截器(在springmvc-config.xml中配置)
③测试拦截器效果是否实现

三 HandlerInterceptor接口

这个接口含有三个方法:

方法名作用说明
preHandle()这个方法将在请求处理之前进行调用,该方法的返回值是布尔值,当返回值为false时,表示请求结束,后续的Interceptor和Controller都不会再执行;当返回值为true时就会继续调用下一个Interceptor的preHandle方法
postHandle该方法是在当前请求进行处理之后被调用,前提是preHandle方法的返回值为true时才能被调用,且它会在DispatcherServlet进行视图返回渲染之前被调用,所以在这个方法里可对Controller层处理之后的ModelAndView对象进行操作
afterCompletion该方法将在整个请求结束之后,也就是在DispatcherServlet渲染了对应的视图之后执行,前提是preHandle方法的返回值为true时才能被调用

四 代码实现

①创建创建拦截器类实现HandlerInterceptor接口

import cn.com.sise.pojo.User;
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;

public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 获取请求的URL
        System.out.println("preHandle执行中");
        // 获取请求的URL
        String url = request.getRequestURI();
        // URL:除了login.jsp是可以公开访问的,其它的URL都进行拦截控制
        if (url.indexOf("/lgCheck") >= 0) {
            return true;
        }
        // 获取Session
        HttpSession session = request.getSession();
        User user = (User) session.getAttribute("USER_SESSION");
        // 判断Session中是否有用户数据,如果有,则返回true,继续向下执行
        if (user != null) {
            return true;
        }
        // 不符合条件的给出提示信息,并转发到登录页面
        request.setAttribute("msg", "您还没有登录,请先登录!");
        request.getRequestDispatcher("/login.jsp")
                .forward(request, response);
        return false;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle在目标方法执行之后,视图渲染之前执行");
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("在所有方法执行之后执行");
    }

该类所在目录截图
在这里插入图片描述

②配置拦截器(在springmvc-config.xml中配置)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xmlns:mvc="http://www.springframework.org/schema/mvc"
	   xmlns:context="http://www.springframework.org/schema/context"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans
	   http://www.springframework.org/schema/beans/spring-beans.xsd
	   http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd
	   http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">

	
<!--	配置拦截器-->
	<mvc:interceptors>
		<mvc:interceptor>
			<mvc:mapping path="/**"/>
			<mvc:exclude-mapping path="/login"/>
			<bean class="interceptor.LoginInterceptor" />
		</mvc:interceptor>
	</mvc:interceptors>

</beans>

说明:
下面这种/** 表示拦截的是所有请求
在这里插入图片描述
如果要放行某个路径,可在下面的标签进行配置
在这里插入图片描述
③测试拦截器效果是否实现
在控制器中新建一个类作为登录路径和主页main路径以及lgCheck检查登录的路径(简单模拟)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/645732.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

superset链接本地数据库

打开图中 选择database 先解释SQLlite的格式 如下 SQLALCHEMY_DATABASE_URI mysql://username:password127.0.0.1:3306/gmall_report’ 请将 username 和 password 替换为实际的 MySQL 数据库的用户名和密码。 mysql则为如下

我有过密接的9个博士

我有过密接的9个博士 是我人生中留下的印迹和谈资 其中一个是中科大少年班的学神 趣讲大白话&#xff1a;多点谈资 【趣讲信息科技196期】 **************************** 我密接过的哪些博士们&#xff1a; 1、科大少年班刘雪峰博士。1998年&#xff0c;创智公司&#xff08;当…

Banana Pi BPI-R3 Mini:2.5GbE 嵌入式路由器板,MTK7986方案

香蕉派 BPI-R3 Mini Banana Pi BPI-R3 Mini 是一款功能强大的 SBC 路由器板&#xff0c;专为需要高速网络功能的个人和企业而设计。这款路由器是广受欢迎的 Banana Pi R3 路由器板的小兄弟&#xff0c;配备了先进的功能&#xff0c;旨在提供可靠的性能&#xff0c;是需要可靠网…

元宇宙游戏:新瓶换新酒

当你打游戏时&#xff0c;你在打什么&#xff1f; 抛出这个问题&#xff0c;便也抛出了游戏背后的组成——设计、技术、应用。 在元宇宙产业链中最有感知度的&#xff0c;是场景和内容&#xff0c;作为现实世界的模拟与延伸&#xff0c;游戏和社交领域是最先具备实现基础的元…

存储基础知识及相关术语

存储基础知识 前置&#xff1a;存储基本概念 我们现在处于信息时代&#xff0c;每天都在和电脑、手、平板机打交道。我们的工作和生活&#xff0c;已经完全离不开视频、音乐、图片、文本、表格这样的数据文件。 而所有这些数据文件&#xff0c;都需要通过电子设备进行保存&…

Windows控制关机锁屏

原文链接 设置永不关机 新建一个vbs文件&#xff0c;内容如下&#xff1a; Set WshShell WScript.CreateObject("WScript.Shell") do WScript.sleep 60000 WshShell.SendKeys "{ScrollLock}" loop该程序的作用相当于每隔一分钟&#xff08;60000毫秒&a…

了解MVC、MVP、MVVM模式

前言 在Android开发中&#xff0c;当你梳理完需求后&#xff0c;你要做的并不是马上写下你的第一行代码&#xff0c;而是需先设计好整个项目的技术框架今天&#xff0c;我将全面介绍Android开发中主流的技术框架MVC、MVP 与 MVVM模式&#xff0c;并实例讲解MVP模式&#xff0c…

Android启动优化实践

作者&#xff1a;95分技术 启动优化是Android优化老生常谈的问题了。众所周知&#xff0c;android的启动是指用户从点击 icon 到看到首帧可交互的流程。 而启动流程 粗略的可以分为以下几个阶段 fork创建出一个新的进程创建初始化Application类、创建四大组件等 走Applicatio…

uni-app配置Vant Weapp

uni-app配置vant-------浏览器运行环境下不兼容 1.创建uni-app项目2.创建wxcomponents目录3. 安装vant需要的模块包3.1找一个空文件cmd 进入执行3.1.1通过 npm 安装3.1.2通过 npm 安装 3.2.1获取dist文件 4.将dist内容复制到wxcomponents目录下5.1 使用vant5.1使用button按钮5.…

Qt扫盲-QKeyEvent 键盘事件

QKeyEvent 键盘事件 一、概述二、事件传播三、常用属性1. key()2. modifiers()3. isAutoRepeat()4. text() 四、简单组合键代码 一、概述 QKeyEvent 是Qt 里面描述键盘事件的一个属性类&#xff0c;所有的事件本质上来说其实就是一个信息包&#xff0c;而这个包里面就是有这个…

探索Redis内部数据结构

Redis支持多种数据结构&#xff0c;每种数据结构都有其特定的用途。下面对Redis支持的主要数据结构进行详细阐述&#xff1a; 一、字符串&#xff08;String&#xff09; 字符串是Redis最基本的数据结构&#xff0c;可以存储一个字符串或者二进制数据&#xff0c;例如图片、序…

Echarts—词云库(echarts-wordcloud)配置详解和使用(可自定义形状)

词云库的详解 前言安装基本配置详解具体使用步骤&#xff08;Vue为例&#xff09;自定义展示形状 前言 我们经常会看到一些网站或者页面有一堆五颜六色的词汇的聚在一块&#xff0c;有大有小的散落着&#xff0c;看着挺好看的&#xff1b; 也许项目中也会涉及到显示一些关键词…

【Linux脚本篇】Linux循环语句-while

目录 &#x1f341;while的语法格式 &#x1f341;while循环案例 &#x1f343;案例一&#xff1a;输出10-1的降序 &#x1f343;案例二&#xff1a;输出10的升序和降序 &#x1f343;案例三&#xff1a;批量创建用户 &#x1f341;内置跳出循环 &#x1f343;案例一&#xff1…

火山引擎 DataLeap:一个易用、高效的数据目录,是如何搭建的?

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 企业如何找到数据、了解数据以及使用数据&#xff1f; 这离不开数据目录的能力。数据目录有着类似于“字典”的作用&#xff0c;能够帮助数据生产者和使用者快速定位…

ESXI 环境搭建和配置

ESXI 环境搭建和配置 ESXI简介 ESXi专为运行虚拟机、最大限度降低配置要求和简化部署而设计。只需几分钟时间&#xff0c;客户便可完成从安装到运行虚拟机的全过程&#xff0c;特别是在下载并安装预配置虚拟设备的时候。 在VMware Virtual Appliance Marketplace 上有800多款…

RabbitMQ 安装

目录 一、安装RabbitMQ1、Linux 安装⑴、官网rpm包安装①、下载rpm安装包官网下载erlangrabbitmq packagecloud下载erlangrabbitmq ②、安装 erlang③、安装rabbitmq ⑵、packagecloud快速安装⑶、添加用户账号及权限并登陆⑷、卸载erlang与rabbitmq卸载rabbitmq卸载erlang 2、…

积聚产业发展新动能|2023开放原子全球开源峰会OpenAtom OpenHarmony分论坛成功举办

6 月 12 日&#xff0c;以“OpenHarmony 共建开放&#xff0c;共享未来”为主题的 2023 开放原子全球开源峰会 OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;分论坛在北京北人亦创国际会展中心第一报告厅圆满落幕。开放原子开源基金会理事长孙文龙、华…

【mongoDB数据库基本操作】

mongoDB 基本命令使用 mongoDB数据库基本操作1、连接/创建数据库3、查看数据库4、删除数据库 表的基本操作1、创建表2、删除表3、查询表4、更新表删除表中的记录 mongoDB数据库基本操作 连接mongoDb服务器 进入到mongoDb安装目录 cd /data/mongodb/bin 使用./mongo连接到本…

为什么你的领导,总是挑刺,要求你要有自己的思考?

为什么你的领导&#xff0c;总是挑刺&#xff0c;要求你要有自己的思考&#xff1f; 如何思考&#xff1f;其实有方法论和框架&#xff0c;照这做&#xff0c;也能提升自己的思考能力和维度。 尴尬的问题 在职场的给位是否遇到过这种情况。领导在开完一次沟通会&#xff0c;或…

公元前后的王莽与屋大维

公元元年前后&#xff0c;地球的两端同时产生了两个辉煌的大国&#xff0c;z国和罗马。 我国经历了漫长而又松散的分封制后&#xff0c;在秦帝国时期实现了大一统&#xff0c;在那个时代&#xff0c;因为分封制有效的管理半径最多也就是500公里左右&#xff0c;所以非常不适合…