阅读本文约“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

项目的开发文档也比较详细。

转载于:https://www.cnblogs.com/UncleCatMySelf/p/9187179.html

SpringBoot登录登出切面开发相关推荐

  1. java php 单点登陆,cas实现单点登录,登出(java跟php客户端)(转)

    cas实现单点登录,登出(java跟php客户端)(转)cas实现单点登录,登出(java和php客户端) (转) 最近项目中需要做单点登录,客户端包含java和php,java有几个应用程序,php ...

  2. [django项目] 实现用户登录登出功能

    用户登录登出功能 I. 功能需求分析 1>功能分析 1.1>流程图 1.2>功能接口 登录页面 登录功能 退出功能 II. 登陆页面 1>接口设计 1.1>接口说明 类目 ...

  3. linux 执行程序 注销,Linux登录登出的过程 | Soo Smart!

    最近一直遇到crontab执行脚本和手动执行结果不一样的问题.根据添加的echo语句已经确定crontab能够准时执行任务,可是脚本里的程序不能正确执行.唯一能确定的是环境变量问题,可是即使明确地写上 ...

  4. ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单 ...

  5. 网易云信集成视频教程(四):如何快速实现iOS登录登出?

    上期我们介绍了如何通过SDK实现自定义消息,第四期视频教程我们将教大家如何快速实现iOS系统下IM登录登出. 第四期 如何快速实现iOS登录登出? 8分钟视频手把手教你接入 文档详解 前期准备 1. ...

  6. 网易云信集成视频教程(一):如何快速实现安卓登录登出?

    由于网易云信稳定.可靠的技术服务以及拥有深厚积淀的行业口碑,越来越多用户集成云信IM和音视频功能.为了提升用户集成效率,我们推出了一系列网易云信集成视频教程,希望帮助用户快速实现功能接入.第一期将为大 ...

  7. ThinkPHP---案例1登录登出和添加部门

    配置文件分3类:系统配置文件,分组配置文件,应用配置文件 ①系统配置文件ThinkPHP/Conf/convention.php: ②分组 / 模块 /平台配置文件Home/Conf/config.p ...

  8. SSM项目图书馆管理系统,适合新人练手和毕设参考,功能首页展示 系统注册登录登出 用户管理 权限控制管理 书籍管理 图书借阅管理 个人借阅记录管理 书籍详细信息展示等

    图书馆管理系统,系统采用B/S架构 系统采用框架:java+maven+stringboot+mybatis+mysql-plus+boostart(前端界面) 首页展示 内容后台管理 菜单权限管理 ...

  9. ios快捷指令:一键登录/登出南京大学校园网

    软件版本要求:ios13及以上 演示机型:iPhone 12 mini 演示系统版本:ios14.6 文章目录 导言 核心步骤:最简单的一键登录指令 自动化:连接NJU-WLAN后自动登录 修改细节: ...

最新文章

  1. css改变背景透明度
  2. 《强化学习周刊》第30期:Deep Mind开展人机交互的新试点研究、MIT提出神经进化优化框架...
  3. 【JUnit 报错】 method initializationerror not found:JUnit4单元测试报错问题
  4. golang byte转string_Golang和Rust语言常见功能/库
  5. listbox wpf 取消边框_停止使用箭头C#WPF导航列表框(Stop listbox from navigating with arrows C# WPF)...
  6. HDOJ 1896 Stones 解题报告
  7. 华为P40pro 手机云台_2020年目前拍照最好的手机推荐!华为P40 Pro!DXO全球榜首
  8. 如何在 Mac 上使用“接力”回到上次离开的地方?
  9. AC97声卡的驱动安装
  10. 总结 | ACL2022主会论文分类整理
  11. QQ农场启示录之:偷菜成本核算
  12. 表格识别综述与相关实战
  13. Kylin Error:Cannot start job scheduler due to lack of job lock
  14. 木子-后端-根据出生日期算出年龄
  15. 中国大学moocpython答案查询_中国大学MOOC(慕课)_Python编程基础_mooc题库答案查询...
  16. java等待所有子线程执行完毕再执行
  17. TextView Recyclerview省略号相关
  18. [BZOJ2539][CTSC2000][KM]丘比特的烦恼
  19. stm32 多通道AD和单通道AD的差别
  20. JavaWeb解决form表单刷新提示确认重新提交表单

热门文章

  1. 管理Sass项目文件结构
  2. 读zepto核心源码学习JS笔记(3)--zepto.init()
  3. 销售员/学员/讲师系统
  4. Problem B: 字符类的封装
  5. [IIS6.0]Silverlight网站配置
  6. VUE config/index.js文件配置
  7. Unity3D 场景与C# Control进行结合
  8. Spring+jpaNo transactional EntityManager available
  9. PPP认证方式pap chap chap2
  10. 浅谈PHP+Access数据库的连接 注意要点