SpringMVC+自定义注解实现注解拦截器

2023-11-01

目的:通过注解标注该请求需要进行拦截

1.自定义注解:

    创建名为LoginInterceptor的注解

//生成javadoc时会包含注解
@Documented
//作用域
@Target(
        { ElementType.METHOD, ElementType.TYPE })
//生命周期
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginInterceptor {
    public String url() default "";
    //可以随便写参数,在使用时调用
}

    关于作用域:METHOD就是方法,TYPE表示类,申明该注解即可用在方法上,也可以用在类上。

    至于注解里的变量:就是注解附带的信息,可以没有变量,如果有变量并且没有默认值(default)的时候,使用注解就必须赋值。

2.实现SpringMVC的拦截效果:

    创建拦截器的类继承HandlerInterceptorAdapter(此时我们只想做前置拦截,就不实现HandlerInterceptor接口了,用适配器就好了)

 
public class LoginCheckController extends HandlerInterceptorAdapter {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        boolean flag = false;
        //通过handler请求的方法再获取被请求的方法上的LoginInterceptor注解
        LoginInterceptor loginInterceptor = ((HandlerMethod)handler).getMethodAnnotation(LoginInterceptor.class);
        //判断是否有LoginInterceptor注解
        if(null == loginInterceptor){//没有注解表明该请求不需要被拦截直接返回true
            flag = true;
        }else {//有注解说明我们需要进行登录验证的处理
            HttpSession session = request.getSession();
            User user  = (User)session.getAttribute("OFMUser");
            if (null != user){//如果有session说明用户已经登陆返回值设置为true
                flag = true;
            }
        }
        if (flag == false){//说明用户此时没有登录,跳转到登录页面
            loginInterceptor.url();//此处表示我们可以获取的到我们使用直接时传递的参数(只是为了证明我们可以获取使用注解时传递的参数,在当前程序里没有实际作用)
            response.sendRedirect(request.getContextPath()+"/page/login");
        }
        return  flag;
    }

}

在SpringMVC的配置文件中添加

  <!--拦截器-->
    <mvc:interceptors>
        <!-- 多个拦截器,顺序执行 -->
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <!--被排除拦截的资源-->
            <mvc:exclude-mapping path="/css/**"/>
            <mvc:exclude-mapping path="/fonts/**"/>
            <mvc:exclude-mapping path="/images/**"/>
            <mvc:exclude-mapping path="/img/**"/>
            <mvc:exclude-mapping path="/js/**"/>
            <mvc:exclude-mapping path="/sass/**"/>
            <bean class="com.sakura.controller.LoginCheckController"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

在后面用<bean>申明我们创建的拦截器的类

最后在我们需要被拦截的请求上添加注解:

    @LoginInterceptor(url = "login")
    @RequestMapping("/text")
    public ModelAndView toText(){
        ModelAndView mv = new ModelAndView();
        mv.setViewName("text");
        return mv;
    }

此处的url=“login”,就相当于给注解的url赋值 可以在拦截器中通过 注解对象.变量名获取。上面的代码有写出

自此我们就可以再需要被拦截的请求加上注解就可以实现拦截效果了。

  




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringMVC+自定义注解实现注解拦截器 的相关文章

  • WIN10与VMware中的Ubuntu20.04.3系统文件共享(可视化界面居多、无脚本)

    1 在WIN10本地创建一个用于共享的文件夹 2 安装VMware Tools并完成配置 3 开启 共享文件夹
  • 我用了两年时间去读《Thinking in Java》

    路漫漫其修远兮 吾将上下而求索 题记 我用了两年时间去读 Thinking in Java 无论在学校还是在工作 都能听到过来人说 Java编程思想是一本经典著作 于是乎在工作以后 我就买了一本来看看 后来呢 在这断断续续两年时间 精读略读
  • 域名反查、权重查询以及ICP备案查询——ipInfoSearch

    域名反查 权重查询以及ICP备案查询 ipInfoSearch ipInfoSearch 一 配置需要python三方包 二 基本用法 三 多线程用法 文中工具已上传至github https github com Potato py ip
  • 时域和空域和频域

    傅立叶变换是f t 乘以正弦项的展开 正弦项的频率由u 其实是miu 的值决定 因为积分后左边剩下的为一变量是频率 所以我们说傅立叶变换域是频率域 数字图像处理 冈萨雷斯 中文第三版P128 当变量t用于说明图像时 我们一般将变量t的域称为
  • [Python人工智能] 四.神经网络和深度学习入门知识

    从本篇文章开始 作者正式开始研究Python深度学习 神经网络及人工智能相关知识 前三篇文章讲解了神经网络基础概念 Theano库的安装过程及基础用法 theano实现回归神经网络 theano实现分类神经网络 这篇文章又回到基础知识 结合
  • Chromedriver安装教程【无需翻墙】

    第一步 查看你当前Chrome浏览器的版本 如下图所示 第二步 查看当前Chrome浏览器的版本号 如下图所示 版本 108 0 5359 125 正式版本 64 位 中的 108就是我们的版本号 第三步 到谷歌驱动下载地址 https n
  • spring全家桶

    目录 一 Spring基础 1 Spring的核心模块 2 Spring中用到的设计模式 3 Spring SpringMVC SpringBoot SpringCloud 二 SpringIOC 1 IOC的理解 2 Spring中的循环
  • java基础

    java简介 Java是一门面向对象的编程语言 不仅吸收了C 语言的各种优点 还摒弃了C 里难以理解的多继承 指针等概念 因此Java语言具有功能强大和简单易用两个特征 Java语言作为静态面向对象编程语言的代表 极好地实现了面向对象理论
  • psql的使用与常用参数

    使用psql时默认使用安装数据库时的用户登录 端口默认5432 默认连接数据库是用户名db 使用默认用户登录时是超级用户 不需要密码 但是第一次登录会因为未创建该用户名的数据库而登录失败 首次登录需要手动创建用户名数据库或者选择默认的pos
  • Linux中source命令的用法

    source命令 source命令也称为 点命令 也就是一个点符号 source命令通常用于重新执行刚修改的初始化文件 使之立即生效 而不必注销并重新登录 用法 source filename 或 filename source命令除了上述
  • BUUCTF 之 [ACTF2020 新生赛]Exec(命令执行漏洞)

    BUUCTF 之 ACTF2020 新生赛 Exec 命令执行漏洞 相关 观察 进攻 相关 项目 内容 难度 简单 类型 WEB 靶场 BUUCTF 坐标 Exec 观察 这界面和这网页标题结合起来 相信给位都能猜到这个靶场中很有可能存在命
  • 类和对象的学习

    类和对象的学习 1 什么是类 class 就是声明一个类 概念 一类事物的总体描述 及该事物包含方法的总称 属性 描述这个事物的 方法 这个事物特有的行为 定义一个学生类 属性 名字 年龄 性别 方法 吃饭 睡觉 学习 打游戏 2 封装一个
  • 《创新创业实训》网课答案解析

    创新创业实训 网课答案解析 一 网课的简单介绍 二 部分习题的展示 三 获取全部内容 一 网课的简单介绍 创新创业实训 是我之前选的一门网课 由于其比较小众 所以很多课后题很难在网上找到答案 为了帮助后续选择这门课的同学 这里我将该网课所涉
  • Zabbix--API接口

    一 API的简单介绍 Zabbix API允许你以编程方式检索和修改Zabbix的配置 并提供对历史数据的访问 1 应用 1 创建新的应用程序以使用Zabbix 2 将Zabbix与第三方软件集成 3 自动执行常规任务 2 意义 abbix
  • RabbitMQ多种问题出现的解决方案

    消息丢失 1 只要订单完成我们就会发送一条消息给MQ 这个途中突然MQ服务器网络中断 导致消息无法抵达 做好容错方法需要在消息发送前加上异常处理 try rabbitTemplate convertAndSend order event e
  • 区间和

    模板 模板来自AcWing vector
  • IDEA中新建一个java类,无法实现Servlet接口或者继承HttpServlet类

    有道云笔记链接可查看 IDEA中新建一个java类 无法实现Servlet接口或者继承HttpServlet类 问题描述 新建一个java类 无法实现Servlet接口或者继承HttpServlet类 原因 缺少tomcat的librari
  • SQL每日一练(牛客新题库)——第2天: 条件查询

    文章目录 1 查找后排序 2 查找后多列排序 3 查找后降序排列 4 查找学校是北大的学生信息 5 查找年龄大于24岁的用户信息 6 如何让刷题变得更高效 1 查找后排序 题目 现在运营想要取出用户信息表中的用户年龄 请取出相应数据 并按照
  • linux日志系统介绍 —— syslog(),openlog(),closelog()

    函数使用介绍 这里面的三个函数openlog syslog closelog是一套系统日志写入接口 另外那个vsyslog和syslog功能一样 仅仅是參数格式不同 通常 syslog守护进程读取三种格式的记录消息 此守护进程在启动时读一个
  • 毕业两年月薪36k,有时候人与人的差距比人和狗还大

    想起两年前交流过的一个应届生 当时他刚毕业技术水平不高 进了一个小公司做Java后端实习工作 最近联系上了 不问不知道 一问吓一跳 他现在已经进了某一线大厂 月薪36K 这位朋友其实也没比别人强多少 关键在于面试前做足了准备 许多人迫切需要

随机推荐

  • 有序表的合并

    目录 前言 一 有序表合并的两种方式 二 两种实现方式的具体操作 1 顺序表 2 链式 三 两种实现方式的比较 四 总结 前言 通过对线性表的学习 我们对其相关概念已经一定的认识 下面我们通过一些简单的实例应用来增进对线性表相关知识的认识并
  • Synthtext 数据集

    Synth text 数据集官网下载的主要包含图像文件夹和gt mat标注文件 共85万 858750 多张图片数据 该数据集中包含了词级别标注 字符级别标注和文本识别内容 可用于文本检测和文本识别模型 1 mat格式标注文件读取 采用sc
  • pythonscipy教程_Python学习教程(Python学习路线):Python—SciPy精讲

    SciPy 是 Python 里处理科学计算 scientific computing 的包 使用它遇到问题可访问它的官网 https www scipy org 去找答案 在使用 scipy 之前 需要引进它 语法如下 import sc
  • transformer 全总结

    这篇大概写于好几个月之前 最近又很多东西要重新开始 于是重新写起笔记 这是写给我自己看的笔记 所以读者看不明白是很正常的 但我并不觉得完全没有参考价值 毕竟之前看的trans介绍 要么只有encoder 要么没有训练过程 transform
  • 项目:串口接收—ram存储—TFT显示(完整设计)

    目的 1 使用uart串口接收模块接收待显示的串行数据 像素RGB值 2 把待显示的数据写入ram中 3 从ram中读取像素值到TFT显示屏中显示 并对应输出该像素的坐标值 注意 1 遵循uart协议的一个数据位宽为8 一个RGB565像素
  • html标签的checked属性详解

    注意 当元素中有checked属性时 其值无论是什么 都是被选中状态 那怎么才能让其不被选中呢 就是用jquery或js代码实现 1 html中的checked属性 仔细研究下会发现一个很怪异的现象 你知道上面这四个复选框到底那些被选中了
  • VS Code远程连接虚拟机

    太久没有使用VS Code看虚拟机的项目了 今天想看一下操作系统的代码 连接时遇到了一些比较低级的错误 便重新梳理一下整个连接流程 主要分为三步 第一VS Code下载插件 第二 虚拟机上 Ubuntu 下载ssh 第三 建立连接 Vs C
  • Layui的本地存储方法-Layui.data的基本使用 操作localstorage和sessionstorage

    http www manongjc com detail 11 jrxosqvtzledyab html
  • Git查看远程提交状态的方法

    git使用过程中 经常遇到这样的问题 已经git push 了 但是 由于冲突或者push的分支不对 导致远程的和本地的不一致 这就需要提交后查看一下远程的是否ok 查了一下资料 找到了一些方法 就做个记录吧 当程序员 要记得东西太多了 哈
  • yolo3训练自己的模型 基于TensorFlow-keras( python)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 所用到的版本 二 训练自己的模型 1 打开下载的yolo文件夹 2 建立如下目录 3 标记目标 4 修改配置 4 运行test py文件 5 运行trai
  • C++ 实现字符串逆序Hello World,输出olleH dlrow

    定义一个命名空间Myspace 包含以下函数 将一个字符串中的所有单词进行反转 并输出反转后的结果 例如 输入字符串为 Hello World 输出结果为 olleH dlrow 并在主函数内测试该函数 include
  • vue-cli3.0+tinymce实现富文本效果

    前言 之前vue用的富文本插件 tinymce 感觉还是停实用的 正好最近又用到了 在这里分享下 最下面提供中文文档 需要更多功能 或者感觉有不详细的可以看下 也可以留言问我 我看到肯定会回复的 效果 步骤 第一 安装两个插件 前者是 ti
  • JavaFX技巧6:使用透明颜色

    为用户界面元素选择正确的颜色始终是一个很大的挑战 但是当您开发可重用的框架控件时 开发人员就无法控制使用它们的应用程序的外观和感觉 这甚至更具挑战性 尽管您可能总是将元素添加到默认的灰色背景之上 但是嵌入控件的开发人员可能更倾向于哥特式风格
  • Qt交叉编译到arm平台

    从网上下载对应版本的Qt源码 https download qt io archive qt 5 9 5 9 3 single 我下载的是5 9 3的版本 解压到ubuntu上 下载使用gcc 4 9 4编译器 并配置环境变量 尽量选择高版
  • 物联网技术在智慧城市建设应用中的难点与疑点

    物联网技术在智慧城市建设应用中的难点与疑点 本文由本人发表 中国安防 第141期 2017年7月刊智慧城市栏目 徐建明 佳都科技 18971024137 Xujianming pcitech com 一 引言 物联网 概念首先由美国麻省理工
  • 这些嵌入式系统安全性的知识你需要了解

    这可能是 工程师在面对嵌入式系统应用程序的安全性时可能提出的第一个问题 不幸的是 有大量的 安全软件包 可用 并且对安全性不熟悉的嵌入式工程师可能只将安全性称为加密或病毒防护 尽管加密是安全性的一种工具 而病毒扫描程序从技术上讲可以提供安全
  • 物联网毕业设计选题推荐100例

    文章目录 1 前言 2 选题分享 2 1 嵌入式方向 2 2 算法方向 2 3 移动通信方向 2 4 学长作品展示 2 选题技巧 2 1 如何避坑 重中之重 2 2 难度把控 2 3 题目名称 3 最后 1 前言 这是学长亲手整理的物联网相
  • 无线华为能连苹果不能连接到服务器,华为手机连苹果Mac,连不上?手把手教你...

    一直都用数据线 将华为手机里的内容保存到Mac中 作为备份 比如很多大的照片 用微信等一张张传 再一张张下载又容易失真 又耽误时间 所以还是直接读取手机的内容比较方便 最近才知道有华为分享这个方法 可是按照华为官方方法 长按手机 华为分享
  • STM32F103ZET6【标准库函数开发】------05.通用定时器TIM5四个通道输出PWM信号

    STM32有四个通用定时器 现在介绍TIM5输出4路PWM的方法 下面展示主要的time c main c函数的代码 include timer h void TIM5 PWM Init u16 arr u16 psc GPIO InitT
  • SpringMVC+自定义注解实现注解拦截器

    目的 通过注解标注该请求需要进行拦截 1 自定义注解 创建名为LoginInterceptor的注解 生成javadoc时会包含注解 Documented 作用域 Target ElementType METHOD ElementType