怎么通过controller层退出登录_控制层访问拦截
在控制层进行访问拦截也是我们在项目中常会遇到的需求,例如:项目中要求系统登录操作有时间限制--12306购票时间的限制等.
对于这类需求我们一般有几种选择:
- 过滤器Filter
- AOP
- SpringMVC拦截器...
本文我们主要说一下SpringMVC拦截器的实现
原理
Spring MVC的拦截器是基于回调机制,可以在目标方法执行之前/之后,做一些处理.
如下图所示:
客户端的请求通过前端控制器会被HandleInterceptor拦截器拦截,会根据拦截器的方法(preHandle/postHandle),分别在Controller层的目标方法之前或之后只写一些业务.
实现
我们要实现的是登录前的拦截,然后进行时间判定--所以我们需要用preHandle方法,可以在目标方法执行之前,先进行业务检测,满足条件则放行,不满足条件则进行拦截
具体实现分为两步:
- 定义拦截器:
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表示拦截结束.
- 对拦截器进行配置
@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层退出登录_控制层访问拦截相关推荐
- 不拦截指定路径_控制层访问拦截
在控制层进行访问拦截也是我们在项目中常会遇到的需求,例如:项目中要求系统登录操作有时间限制--12306购票时间的限制等. 对于这类需求我们一般有几种选择: 过滤器Filter AOP SpringM ...
- html退出登录_退出登录 0152
用户只需要向 Spring Security 项目中发送/logout 退出请求即可. 1 退出实现 实现退出非常简单,只要在页面中添加/log <a href="/logout&qu ...
- 微软edge如何退出登录_如何更新Microsoft Edge
微软edge如何退出登录 Microsoft 微软 Browser updates are important. Updates for Microsoft Edge deliver critical ...
- html退出登录_[实战小剧场servletamp;jsp] 用户登录及退出功能实现
项目使用技术:servlet+jsp+mybatis 用户登录: 根据用户名和密码查询用户信息.查到则登录成功,查不到则登录失败. 用户退出: 销毁session 登录思路: 浏览器在登录页面发起登录 ...
- windows 远程 登录无操作30分钟后自动退出登录_【计时优易学车远程教育学习流程】...
重要通知: 1.2020年11月21日之后报名的学员,目前不需要到驾校学习科目一(4小时)及科目四(2小时),可直接用优易学车app远程教育学习,请12月6日之前尽快将科目一及科目四学时学完,如后期有 ...
- 关闭浏览器后退出登录_升级后的相互宝要不要退出?相互宝怎么关闭?
相互宝是蚂蚁金服推出的一项大病互助计划,最近升级了. 那么升级后的相互宝要不要退出呢? 相互宝加入的门槛比较低,芝麻信用达到650分就有资格加入资格. 今年相互宝进行了升级,从"相互保&qu ...
- k8s登录_登陆并访问k8s的apiserver
kubeadm安装的k8s集群默认需要用户登陆认证,无法直接使用命令curl访问.所以首先的第一步就是获取token. 先找到k8s集群中的dns组件coredns,之前的版本使用的是kube-dns ...
- asp 退出登录修改cookie能进入后台_深入浅出让你理解跨域与SSO单点登录原理与技术...
一:SSO体系结构 SSO SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用 ...
- controller的异常处理以及service层的事务控制___controller层 trycatch不影响service层抛出的异常
controller的异常处理以及service层的事务控制 最近写代码涉及到一些事务,上午终于把代码给理顺了,之前不太清楚在哪里做异常处理,导致代码遍地try-catch,相当难看. 还是基于con ...
最新文章
- php 二维数组排序函数,php自定义二维数组排序函数array
- python应用:最长无重复字串提取
- SVR4/4.3BSD与Linux对待伪终端的不同方式
- [ATF]-TEE/REE系统切换时ATF的寄存器的保存和恢复
- 【JDK源码】java.lang包常用类详解
- C++ Primer(第五版)第七章 类 部分答案
- Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (20) - IvyBridge微架构
- 在集设浏览学习高水准海报设计,会带给你不一样的灵感!
- php json 特殊字符,PHP转义Json里的特殊字符的函数
- 拓端tecdat|R语言中使用多重聚合预测算法(MAPA)进行时间序列分析
- codesys工控机_CoDeSys
- Vscode信任问题
- 《打造Facebook》 读书报告
- 服务器内存UDIMM与RDIMM区别
- OpenSSH之Windows账户访问操作
- 线性空间的定义与性质
- Visual Studio Code 新手教程
- numpy中rand与randn的区别
- 状语从句到独立结构(absolute construction )
- 计算机二级office模拟操作试题,计算机二级Office模拟试题及答案
热门文章
- TensorFlow 还是 PyTorch?哪一个才更适合编写深度神经网络?
- 从开源开发者身上学到的 5 种品质
- 程序员相亲竟然因为这个被拒绝了......
- @程序员,快来速取硬核的汇编语言知识大全!
- 不为人知的 35 个 More Effective C++ 改善编程与设计的最佳方法 | 原力计划
- IBM 发布企业级社交协作平台 Domino V10,开启快速应用程序开发的新时代
- PingCAP 完成 C 轮 5000 万美元融资,创新型分布式关系型数据库领域最大笔融资
- 程序员版的《后来的我们》,结局竟是……
- @程序员,与JavaScript 疲劳症SayBye!
- 揭秘世界首位机器人公民:按照赫本形象设计、曾扬言毁灭人类