SpringBoot登录登出切面开发
阅读本文约“2.5分钟”
本文开发环境是SpringBoot2.X版本。
对于系统而言(这里多指管理系统或部分具备登录登出功能的系统),登录登出是一个类权限验证的过程,现在一般是以token进行校验,即用户输入登录信息,系统对其进行判断,如果信息准确放行并下发一个token值到用户的cookie中,接下来用户的每一个操作(对系统的读写操作等),后台系统都会验证token的准确性还有存在性,以此确定用户的登录信息正常,登出时就清除token,如下图所示。
那么可能意味着,我们对每一个Controller层的方法都需要加一个token验证的代码段,这是非常浪费时间的流程。
那么SpringBoot中就有非常方便我们处理这个同意验证的方式,我们可以通过切面Aspect,通过定义切面类,并使用Poincut指定切入点,比如某字段开头的全部Controller类的方法,并在Before之前进行验证,我们就进行写一个验证说实现,即查询Cookie中是否存在token字段,token字段与下发的原始token是否相同,进行验证,如果不对,就抛出自定义的验证异常如AuthorizeException类(其继承RuntimeException),然后在定义了一个捕获异常的handler,对验证异常的返回做统一的数据返回格式。
如下流程图所示。
还有一点,我们下发的token是要存放在哪里呢?这里的token是随机的,暂时性的(即存在时间限制,用户不可能永远有权限访问,存在过期时间),对于单应用系统可以存放在系统内存中,如设定一个全局的set等,但是现在大部分架构要考虑分布式,我推荐存放在redis中,并设定时间,这样Aspect中的方法就仅仅多了去redis中查询的操作,登录时也仅需将生成的token存放到redis中。
这种方式很适合分布式应用,我在个人的开源项目中就是使用了这种方式,如果有兴趣,大家可以去看看源码MintSells
https://github.com/UncleCatMySelf/MintSells
项目的开发文档也比较详细。

SpringBoot登录登出切面开发的更多相关文章
- Django项目: 4.用户登录登出功能
用户登录登出功能 一.功能需求分析 1. 登录退出功能分析 流程图 功能 登录页面 登录功能 退出功能 二.登录页面 1. 接口设计 接口说明 类目 说明 请求方法 GET url定义 /user/l ...
- flask 实现登录 登出 检查登录状态 的两种方法的总结
这里我是根据两个项目的实际情况做的总结,方法一(来自项目一)的登录用的是用户名(字符串)和密码,前后端不分离,用form表单传递数据:方法二用的是手机号和密码登录,前后端分离,以json格式传递数据, ...
- Struts2学习第六课 实现登录登出功能
关于Struts2请求的扩展名问题: 1).org.apache.struts2包下的default.properties中配置了struts2应用的一些常量 2).struts.action.ext ...
- ThinkPHP---案例1登录登出和添加部门
配置文件分3类:系统配置文件,分组配置文件,应用配置文件 ①系统配置文件ThinkPHP/Conf/convention.php: ②分组 / 模块 /平台配置文件Home/Conf/config.p ...
- ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 登录登出 上一章节我们总算完善了注册的功能,而且也添加了一个用户,现 ...
- jquery ajax常用的登录登出
整理jquery+ajax的登录登出方法. //登录 var currentUserId = -1; $(function() { var timestamp = (new Date()).value ...
- CAS5.3 单点登录/登出/springboot/springmvc
环境: jdk:1.8 cas server:5.3.14 + tomcat 8.5 cas client:3.5.1 客户端1:springmvc 传统web项目(使用web.xml) 客户端2:s ...
- Android网络开发实例(基于抓包实现的网络模拟登录,登出和强制登出)
学习Android有几个月了,最近喜欢上了网络编程,于是想通过Android写一些一个小程序用于连接外网.在这里非常感谢雪夜圣诞的支持,非常感谢,给我打开新的一扇门. 1.声明,本程序只能用于西南大学 ...
- 利用Vue.js实现登录/登出以及JWT认证
JSON Web Token 入门教程:http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html 后端代码地址:https ...
随机推荐
- Visual Studio 开发(一):安装配置Visual Studio Code
一.为何使用Visual Studio Code 在学习音视频开发的时候,使用到了C和C++,在回顾复习C和C++的知识的时候,需要编写一些代码来加强理解. 虽然,有在线的语言编辑工具https:// ...
- 第33节:Java面向对象中的异常
Java中的异常和错误 Java中的异常机制,更好地提升程序的健壮性 throwable为顶级,Error和Exception Error:虚拟机错误,内存溢出,线程死锁 Exception:Runt ...
- Oracle的nvl函数和nvl2函数
一.基本语法 介绍一下oracle的nvl函数和nvl2函数. nvl函数 nvl函数基本语法为nvl(E1,E2),意思是E1为null就返回E2,不为null就返回E1. nvl2函数 nvl2函 ...
- 开源框架SpringMvc和Struts2的区别
1.机制 spring mvc 和 struts2的加载机制不同:spring mvc的入口是servlet,而struts2是filter:(servlet和filter的区别?) 2.性能 spr ...
- Ubuntu安装Python2.7,nodejs,Redis
安装Python2.7 sudo add-apt-repository ppa:fkrull/deadsnakes-python2.7sudo apt-get update sudo apt-get ...
- 关于 Spring Security OAuth2 中 CORS 跨域问题
CORS 是一个 W3C 标准,全称是”跨域资源共享”(Cross-origin resource sharing).它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了 AJA ...
- redis 系列3 数据结构之简单动态字符串 SDS
一. SDS概述 Redis 没有直接使用C语言传统的字符串表示,而是自己构建了一种名为简单动态字符串(simple dynamic string, SDS)的抽象类型,并将SDS用作Redis的默 ...
- sql server 索引阐述系列六 碎片查看与解决方案
一 . dm_db_index_physical_stats 重要字段说明 1.1 内部碎片:是avg_page_space_used_in_percent字段.是指页的填充度,为了使磁盘使用状况达到 ...
- socket编程(C++)
介绍 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. 过程介绍 服务器端和客户端通信过程如下所示: 服务端 服务端的过程主要在该图的左侧部分,下 ...
- RocketMQ源码 — 四、 Consumer 接收消息过程
Consumer consumer pull message 订阅 在Consumer启动之前先将自己放到一个本地的集合中,再以后获取消费者的时候会用到,同时会将自己订阅的信息告诉broker 接收消 ...