不拦截指定路径_控制层访问拦截

在控制层进行访问拦截也是我们在项目中常会遇到的需求,例如:项目中要求系统登录操作有时间限制--12306购票时间的限制等.

对于这类需求我们一般有几种选择:

  1. 过滤器Filter
  2. AOP
  3. SpringMVC拦截器...

本文我们主要说一下SpringMVC拦截器的实现

原理

Spring MVC的拦截器是基于回调机制,可以在目标方法执行之前/之后,做一些处理.

如下图所示:

589fa37db34208ed338f285370c7ae79.png

客户端的请求通过前端控制器会被HandleInterceptor拦截器拦截,会根据拦截器的方法(preHandle/postHandle),分别在Controller层的目标方法之前或之后只写一些业务.

实现

我们要实现的是登录前的拦截,然后进行时间判定--所以我们需要用preHandle方法,可以在目标方法执行之前,先进行业务检测,满足条件则放行,不满足条件则进行拦截

具体实现分为两步:

  1. 定义拦截器:
public class TimeAccessInterceptor implements HandlerInterceptor{    /** 此方法会在你的目标Controller执行之前执行 */    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)            throws Exception {        System.out.println("==preHandler==");        LocalDateTime now = LocalDateTime.now();//JDK8的新特性        int hour = now.getHour();        System.out.println("hour:"+hour);        if(hour<9||hour>19)            throw new ServiceException("不在访问时间:9~14");//return false        return true;//true表示放行,false表示请求到此结束    }}

我们自己创建一个类并且实现HandlerInterceptor拦截器接口,然后根据你的业务需求实现方法,我们这里实现的是preHandle方法用于在controller执行之前执行,通过JDK8的新特性--LocalDateTime.now()来获取当前时间,可以再通过now.getHoure()等方法来获取具体的小时/分钟/秒等.在判断是否在我们禁止登陆的时间范围内,如果是则抛出异常(这里ServiceException是我们自己定义的异常类),抛出异常==return false,返回值return true表示放行,false表示拦截结束.

  1. 对拦截器进行配置
@Configurationpublic class SpringWebConfig implements WebMvcConfigurer {    /**     * 注册拦截器     */    @Override    public void addInterceptors(InterceptorRegistry registry) {        registry.addInterceptor(new TimeAccessInterceptor())        .addPathPatterns("/user/doLogin");    }}

创建一个SpringWebConfig类并且实现WebMvcConfigurer接口,类由@Configuration注解描述,表示是一个配置类,重写实现类中的addInterceptors方法,参数InterceptorRegistry registry拦截器集合,调用addInterceptor(new TimeAccessInterceptor())向其中添加我们定义的拦截器类,在调用addPathPatterns("/user/doLogin"),添加要拦截的路径,()内就是我们登陆的路径.

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

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

相关文章

电脑知识:Win10系统把系统盘的软件移到D盘的简单方法

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&#x…

RuntimeException和Exception区别

Exception &#xff1a;受检查的异常&#xff0c;这种异常是强制我们catch或throw的异常。你遇到这种异常必须进行catch或throw&#xff0c;如果不处理&#xff0c;编译器会报错。比如&#xff1a;IOException。 RuntimeException&#xff1a;运行时异常&#xff0c;这种异常我…

语言高精度算法阶乘_JavaScript中的算法(附10道面试常见算法题解决方法和思路)...

https://juejin.im/post/6844903811505455118Introduction面试过程通常从最初的电话面试开始&#xff0c;然后是现场面试&#xff0c;检查编程技能和文化契合度。几乎毫无例外&#xff0c;最终的决定因素是还是编码能力。通常上&#xff0c;不仅仅要求能得到正确的答案&#xf…

硬件:LCD和LED相关知识介绍

目录 一、LCD简介 二、LED简介 三、LED和 LCD的区别 四、LED和 LCD显示器的区别 一、LCD简介 LCD是液晶显示屏(Liquid Crystal)Display的全称&#xff0c;主要有TFT、UFB、TFD、STN等几种类型的液晶显示屏无法定位程序输入点于动态链接库上。 笔记本液晶屏最常用的是TFT。 TFT…

Swagger+AutoRest 生成web api客户端(.Net)

简介 对于.net来说&#xff0c;用web api来构建服务是一个不错的选择&#xff0c;都是http请求&#xff0c;调用简单&#xff0c;但是如果真的要在程序中调用&#xff0c;则还有些工作要做&#xff0c;比如我们需要手写httpClient调用&#xff0c;并映射Model&#xff0c; 如果…

抽象方法和抽象类

抽象方法&#xff1a; 1、从上面的例子中我们可以看到抽象方法跟普通方法是有区别的&#xff0c;它没有自己的主体&#xff08;没有{}包起来的 业务逻辑&#xff09;&#xff0c;跟接口中的方法有点类似。所以我们没法直接调用抽象方法 2、抽象方法不能用private修饰&#xf…

adb logcat 保存_保存的logcat在Android设备上的文本文件

I had found some crashes while running the application in android device, which is not showing in emulator. So i need to save the Logcat in a text file in my devices memory or SD card. Could you please suggest me good method to do this?解决方案adb shell l…

电脑技巧:六款Mac电脑上值得推荐的看图软件

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&#x…

C#用Zlib压缩或解压缩字节数组

/// <summary>/// 复制流/// </summary>/// <param name"input">原始流</param>/// <param name"output">目标流</param>public static void CopyStream(System.IO.Stream input, System.IO.Stream output){byte[] bu…

Git的smart Checkout\force checkout\Don‘t Checkout的区别

我们在develop分支修改了代码,但是没有commit,所以在切换到其他分支的时候回弹出这个窗口. smart checkout就会把冲突的这部分内容带到目的分支&#xff08;如果你没有点进窗口的那些文件处理冲突的话&#xff09; force checkout就不会把冲突的这部分内容带到目的分支 dont ch…

软件:推荐5款职场人必备的效率神器APP

目录 1.番茄TO DO&#xff08;支持Android、ios端下载&#xff09; 2.块时间 &#xff08;支持Android、ios端下载&#xff09; 3.滴答清单&#xff08;支持Android、ios端、PC端下载&#xff09; 4.Eventai&#xff08;仅ios端下载&#xff09; 5.Ihour&#xff08;支持Androi…

python滚动文本框_调整滚动Tkinter文本框的大小

我想要一个滚动的Tkinter文本框来填充最大的分配空间。我有点工作。。。在由于某些原因&#xff0c;当我拉伸窗口时&#xff0c;文本小部件很好&#xff1b;但是&#xff0c;滚动条在x轴上有大量的填充。在第二个问题是当我缩小窗口时&#xff0c;屏幕上的滚动条消失了。在有人…

深入理解 KVC\KVO 实现机制 — KVC

KVC和KVO都属于键值编程而且底层实现机制都是isa-swizzing&#xff0c;所以本来想放在一起讲的。但是篇幅有限所以就分成了两篇博文 KVO实现机制传送门 KVC概述 KVC是Key Value Coding的简称。它是一种可以通过字符串的名字&#xff08;key&#xff09;来访问类属性的机制。而不…

python中字典和集合对象是无序的_Python基础(四):元组、字典和集合

基础学习第四弹&#xff0c;常用对象&#xff1a;元组、字典和集合一、元组1.1 元组的应用场景思考&#xff1a;如果想要存储多个数据&#xff0c;但是这些数据是不能修改的数据&#xff0c;怎么做&#xff1f;答&#xff1a;列表&#xff1f;列表可以一次性存储多个数据&#…

Windows常用必备软件整理,太全了,值得收藏

目录 1、Office系列 2、杀毒软件 3、视频播放和视频处理 4、音乐播放 5、压缩解压 6、输入法 7、PDF阅读软件 8、文件加密 9、网盘 10、社交聊天 11、日常办公软件 ‍12、图片/照片处理‍ 13、系统自带的工具 Windows常用必备软件整理&#xff0c;太全了&#xff0c;值得收藏&…

常见的 Error 和 Exception

如下是常见的 Error 和 Exception&#xff1a; 1&#xff09;运行时异常&#xff08;RuntimeException&#xff09;也称 【非检查型异常 UncheckedException】&#xff1a; Nullpointer Exception&#xff1a;空指针异常&#xff1b;ClassCastException&#xff1a;类型强制转…

Datatable/Dataset 转 JSON方法

当数据库表的数据在一般处理程序中查出来需要将这个表数据返回到前台的jquery中&#xff0c;需要将数据拼成json字符串形式&#xff0c;这里是将数据库数据查出放在Datatable中&#xff0c;然后在一般处理程序中将datatable转成json的几个方法&#xff0c;根据不同的情况调用不…

数据库:SQLServer数据库备份方式介绍

今天小编给大家梳理一下数据库备份的相关知识&#xff0c;希望对大家能有所帮助&#xff01;1、完整备份完整备份相当于针对整个数据库备份&#xff0c;包含数据库的全部内容。数据库完整备份可以将数据库的所有内容备份为一个.Bak文件。后续可以通过该备份文件在本机或者拷贝到…

注入双括号报错注入_SQL手动注入:sqlilabs(less110)

种一棵树最好的时间是10年前&#xff0c;其次是现在。忘了是谁前言说实话&#xff0c;由于前段时间学 python &#xff0c;对于 OWASP TOP10 漏洞的学习都有所落下&#xff0c;虽然现在也在慢慢复习当中&#xff0c;但是今晚谈及的 SQL 注入漏洞手动注入和自动化(sqlmap)注入的…

try、catch、finally用法总结

一、异常的处理&#xff1a;抓抛模型过程一&#xff1a;"抛"&#xff1a;程序在正常执行的过程中&#xff0c;一旦出现异常&#xff0c;就会在异常代码处生成一个对应异常类的对象。并将此对象抛出。一旦抛出对象以后&#xff0c;其后的代码就不再执行。关于异常对象…