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

在控制层进行访问拦截也是我们在项目中常会遇到的需求,例如:项目中要求系统登录操作有时间限制--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; 如果…

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

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

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…

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

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

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

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

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

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

markdown学习/mou

markdown编辑器mou markdown编辑器的使用很简单&#xff0c;mac平台选择课 MOU 这款比较轻的客户端。 使用也很方便&#xff0c;打开软件&#xff0c;->helo->mou help 就有各种示例&#xff0c;照葫芦画瓢。 有些关键字需要转义,使用的时候要注意&#xff0c;比如插入一…

硬件知识:内存条出现故障的解决方案!

“电脑不时的突然出现蓝屏”&#xff0c;“开机之后毫无规律的死机”&#xff0c;“开不了机&#xff0c;一开机就出现嘶鸣声”&#xff0c;如果你的电脑出现了以上情况&#xff0c;就是你的内存兼容性出了问题&#xff0c;那么这种故障该如何解决呢&#xff1f;下面&#xff0…

盘点程序员必备的专业术语,值得看一看

英文缩写 API 应用程序接口&#xff08;英语&#xff1a;Application Programming Interface&#xff0c;简称&#xff1a;API&#xff09;&#xff0c;又称为应用编程接口&#xff0c;就是软件系统不同组成部分衔接的约定。由于近年来软件的规模日益庞大&#xff0c;常常需要把…

IDEA中安装配置Jrebel热部署插件用法笔记

今天给大家介绍一下IDEA中安装配置Jrebel热部署插件用法&#xff0c;希望对大家能有所帮助&#xff01;1、Jrebel插件介绍JRebel属于一款JAVA虚拟机插件&#xff0c;它可以让你的项目在不需要进行重新编译的情况下&#xff0c;就可以实时看到代码的变化对项目的影响。这对我们开…

集成支付宝钱包支付iOS SDK的方法与经验

下载 首先&#xff0c;你要想找到这个SDK&#xff0c;都得费点功夫。现在的SDK改名叫移动支付集成开发包了。 https://b.alipay.com/order/productDetail.htm?productId2013080604609654&tabId4#ps-tabinfo-hash Baidu和Googlep排在前面的支付宝开放平台&#xff0c;里面的…

Spring Boot单元测试报错java.lang.IllegalStateException: Could not load TestContextBootstrapper [null]

一&#xff1a;运行test类方法时候报错 报错 java.lang.IllegalStateException: Could not load TestContextBootstrapper [null]. Specify BootstrapWiths value attribute or make the default bootstrapper class available.at org.springframework.test.context.BootstrapU…

PHP底层原理分析和底层扩展编写

运行原理 http://www.phpchina.com/article-40203-1.htmlPHP底层开发 可以理解为就是C的开发&#xff0c;那么简单地说如果我们要查看某个PHP函数的底层实现怎么看呢&#xff1f;需要PHP源码包&#xff1a;http://www.php.net/downloads.php主要目录是Zend 和ext(写扩展的目录…

硬件知识:DP接口和HDMI接口对比,看完你就懂了

目录 一、DP接口 二、HDMI接口 三、总结 电脑显示器高清传输通过会用到两个接口&#xff0c;就是DP接口和HDMI接口&#xff0c;今天电脑学习小编带大家对比一下这两个接口。 一、DP接口 DisplayPort缩写DP&#xff0c;是一个由PC及芯片制造商联盟开发&#xff0c;视频电子标准协…

SpringBoot集成JPA用法笔记

今天给大家整理SpringBoot集成JPA用法。希望对大家能有所帮助&#xff01;搭建SpringBoot项目新建配置文件 application.ymlserver: port: 8090 spring: #通用的数据源配置datasource: driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/test?useSSLf…