在控制层进行访问拦截也是我们在项目中常会遇到的需求,例如:项目中要求系统登录操作有时间限制--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"),添加要拦截的路径,()内就是我们登陆的路径.

怎么通过controller层退出登录_控制层访问拦截相关推荐

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

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

  2. html退出登录_退出登录 0152

    用户只需要向 Spring Security 项目中发送/logout 退出请求即可. 1 退出实现 实现退出非常简单,只要在页面中添加/log <a href="/logout&qu ...

  3. 微软edge如何退出登录_如何更新Microsoft Edge

    微软edge如何退出登录 Microsoft 微软 Browser updates are important. Updates for Microsoft Edge deliver critical ...

  4. html退出登录_[实战小剧场servletamp;jsp] 用户登录及退出功能实现

    项目使用技术:servlet+jsp+mybatis 用户登录: 根据用户名和密码查询用户信息.查到则登录成功,查不到则登录失败. 用户退出: 销毁session 登录思路: 浏览器在登录页面发起登录 ...

  5. windows 远程 登录无操作30分钟后自动退出登录_【计时优易学车远程教育学习流程】...

    重要通知: 1.2020年11月21日之后报名的学员,目前不需要到驾校学习科目一(4小时)及科目四(2小时),可直接用优易学车app远程教育学习,请12月6日之前尽快将科目一及科目四学时学完,如后期有 ...

  6. 关闭浏览器后退出登录_升级后的相互宝要不要退出?相互宝怎么关闭?

    相互宝是蚂蚁金服推出的一项大病互助计划,最近升级了. 那么升级后的相互宝要不要退出呢? 相互宝加入的门槛比较低,芝麻信用达到650分就有资格加入资格. 今年相互宝进行了升级,从"相互保&qu ...

  7. k8s登录_登陆并访问k8s的apiserver

    kubeadm安装的k8s集群默认需要用户登陆认证,无法直接使用命令curl访问.所以首先的第一步就是获取token. 先找到k8s集群中的dns组件coredns,之前的版本使用的是kube-dns ...

  8. asp 退出登录修改cookie能进入后台_深入浅出让你理解跨域与SSO单点登录原理与技术...

    一:SSO体系结构 SSO SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用 ...

  9. controller的异常处理以及service层的事务控制___controller层 trycatch不影响service层抛出的异常

    controller的异常处理以及service层的事务控制 最近写代码涉及到一些事务,上午终于把代码给理顺了,之前不太清楚在哪里做异常处理,导致代码遍地try-catch,相当难看. 还是基于con ...

最新文章

  1. php 二维数组排序函数,php自定义二维数组排序函数array
  2. python应用:最长无重复字串提取
  3. SVR4/4.3BSD与Linux对待伪终端的不同方式
  4. [ATF]-TEE/REE系统切换时ATF的寄存器的保存和恢复
  5. 【JDK源码】java.lang包常用类详解
  6. C++ Primer(第五版)第七章 类 部分答案
  7. Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (20) - IvyBridge微架构
  8. 在集设浏览学习高水准海报设计,会带给你不一样的灵感!
  9. php json 特殊字符,PHP转义Json里的特殊字符的函数
  10. 拓端tecdat|R语言中使用多重聚合预测算法(MAPA)进行时间序列分析
  11. codesys工控机_CoDeSys
  12. Vscode信任问题
  13. 《打造Facebook》 读书报告
  14. 服务器内存UDIMM与RDIMM区别
  15. OpenSSH之Windows账户访问操作
  16. 线性空间的定义与性质
  17. Visual Studio Code 新手教程
  18. numpy中rand与randn的区别
  19. 状语从句到独立结构(absolute construction )
  20. 计算机二级office模拟操作试题,计算机二级Office模拟试题及答案

热门文章

  1. TensorFlow 还是 PyTorch?哪一个才更适合编写深度神经网络?
  2. 从开源开发者身上学到的 5 种品质
  3. 程序员相亲竟然因为这个被拒绝了......
  4. @程序员,快来速取硬核的汇编语言知识大全!
  5. 不为人知的 35 个 More Effective C++ 改善编程与设计的最佳方法 | 原力计划
  6. IBM 发布企业级社交协作平台 Domino V10,开启快速应用程序开发的新时代
  7. PingCAP 完成 C 轮 5000 万美元融资,创新型分布式关系型数据库领域最大笔融资
  8. 程序员版的《后来的我们》,结局竟是……
  9. @程序员,与JavaScript 疲劳症SayBye!
  10. 揭秘世界首位机器人公民:按照赫本形象设计、曾扬言毁灭人类