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

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

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

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

原理

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

如下图所示:

客户端的请求通过前端控制器会被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"),添加要拦截的路径,()内就是我们登陆的路径.

不拦截指定路径_控制层访问拦截相关推荐

  1. 怎么通过controller层退出登录_控制层访问拦截

    在控制层进行访问拦截也是我们在项目中常会遇到的需求,例如:项目中要求系统登录操作有时间限制--12306购票时间的限制等. 对于这类需求我们一般有几种选择: 过滤器Filter AOP SpringM ...

  2. mysql 分区指定路径_[数据库]MySQL 指定各分区路径

    [数据库]MySQL 指定各分区路径 0 2016-11-08 18:00:44 介绍 可以针对分区表的每个分区指定各自的存储路径,对于innodb存储引擎的表只能指定数据路径,因为数据和索引是存储在 ...

  3. mysql rpm包安装指定路径_安装rpm包时指定路径

    1.安装rpm包可以指定路径,但是安装包时它可能执行一些内置的命令.如果手动指定路径,可能造成部分功能失效 比如下面安装jdk的rpm包.默认安装后它会创建个软链接.下面就提示创建软链接失败了.但是不 ...

  4. python保存图片到指定路径_使用Python将不同大小照片制作为GIF动画2

    导读:本文介绍如何使用Python将不同大小的照片制作为GIF动画,文末附源代码.阅读完本文,你将学会使用Python编写程序,将不同大小的照片制作为心仪的GIF动画. 在上一篇文章里,介绍了使用Py ...

  5. python安装失败找不到指定路径_解决安装python库时windows error5 报错的问题

    python安装库时,有时候会报错windows error 5,可以尝试关闭所有使用python的编辑器.文件等,然后重新pip安装,如果还是不行,可以将报错最下层文件删除即可(如果不放心可以将该文 ...

  6. conda指定路径_导出不带前缀变量的conda环境,该变量显示executab的本地路径

    为了在我的团队中提高可重复性,我在新创建的存储库中导出了一个conda环境文件,该存储库运行conda env export > environment.yml.在 我的想法是让我的同事下载re ...

  7. python保存图片到指定路径_用 Python 识别图片中的文字

    (给Python开发者加星标,提升Python技能) 来源:ZackSock 一.前言 不知道大家有没有遇到过这样的问题,就是在某个软件或者某个网页里面有一篇文章,你非常喜欢,但是不能复制.或者像百度 ...

  8. python安装失败找不到指定路径_使用[WinError 2]安装python-crfsuite失败系统找不到指定的文件...

    我试着安装 $ pip install python-crfsuite Collecting python-crfsuite Using cached python-crfsuite-0.8.4.ta ...

  9. java springCloud控制层访问https下的html文件并以流显示到页面

    目标:java controller访问https://xxxx/xxxx.html,以流的形式直接返回该页面 1.添加信任管理器类 public class MyX509TrustManager i ...

最新文章

  1. ssh(Struts+spring+Hibernate)三大框架整合-简述
  2. 美国没有光刻机背后的原因
  3. 洛谷 P3332 [ZJOI2013]K大数查询 解题报告
  4. 恒生证券期货行业用户维稳工作指引(一)
  5. java 桥接模式_JAVA设计模式之【桥接模式】
  6. 牛客练习赛 67——ST表
  7. scroll-view 横向滑动无效的问题
  8. unet实现区域分割
  9. linux上传下载文件命令rz、sz
  10. ethtool源码分析
  11. IE浏览器经典故障分析与实战解决方案
  12. myeclipse Could not create the view
  13. python oct_Python oct()
  14. linux修改数据库密码出现的问题吗,关于linux下mysql修改root密码时遇到的问题
  15. python plot 坐标轴范围_Python,Matplotlib,子图:如何设置轴范围?
  16. 金蝶k3服务器系统吗,金蝶k3能在云服务器上吗
  17. FlashFXP导出导入站点
  18. 微软2019 Windows 10更新五月版:10个不可错过的新功能
  19. Java 反射 理解
  20. 网络优化之“弱覆盖与过覆盖”

热门文章

  1. halcon使用直线标定板,标定相机内参代码
  2. 打开word2016总是出现很抱歉,此功能看似中断需要修复。。问题解决办法
  3. html ascii编码方式,HTML 字符集 参考手册
  4. c语言float输出分数,c语言同一题目求解结果用float和int输出值差1.
  5. mysql自增_面试官:为什么 MySQL 的自增主键不单调也不连续?
  6. 计算机软件记不住设置,想知道电脑密码记不住了怎么办
  7. Robot Framework-Ride界面介绍及库的添加
  8. dateframe行列插入和删除操作
  9. (转)git遇到的问题之“Please make sure you have the correct access rights and the repository exists.”...
  10. [转]jQuery源码分析系列