Springboot 临时授权
以下代码只是部分代码,全部代码链接:
链接:https://pan.baidu.com/s/173HysoAbd9o3C1KfAQ_taA
提取码:thk6
思路:
这个临时授权有简单有难的,我做的算是最简单的,能实现一些基本的功能,只有在指定的时间段内可以访问
临时授权思路
1.数据库设计,在用户表添加三个字段:start_date(开始时间) ,end_date(结束时间),authorizer(授权人)
2.超级管理员admin登录,给某一个用户授予临时权限(传递参数:临时授权人 id,开始时间start_date,结束时间 end_date)
3,从消息头中获取token,根据token查询当前登陆人(就是授权人authorizer)
4,通过前端传递的临时授权人id查询被授权人是否存在,如果不存在返回错误信息
5.限制自己不能给自己授权
6,修改被授权人的信息
验证当前用户权限思路
1.从消息头中获取token,根据token查询当前登陆人信息
2.判断是否是管理员,如果是管理员拥有全部权限
3.判断是否被授权,(获取临时授权时设置的开始时间,结束时间,当前时间),
获取这个三个时间的时间戳,判断当前时间是否在开始时间和结束时间之间
如果开始时间和结束时间为空的话表示当前登录对象未被临时授权,会执行后面的 4,5,6,
如果有时间,但是当前时间不在这个时间段也会执行 4,5,6
如果有时间,并且当前时间在这个时间段之中,就会直接返回true,
4.从请求头中获取当前接口的地址,
5.通过当前登录对象的id查询权限
6.判断当前登录对象的权限中是否包含当前接口的地址,如果包含,允许当前登录对象访问,如果不包含,则不允许当前登录人访问
部分代码:
controller
/*** 临时授权** @param people* @return*/ @PostMapping("/grantpower") public AjaxResult grantpower(@RequestBody People people, HttpServletRequest request, HttpServletResponse response) {//获取当前登录对象名String userName = getUserName(request.getHeader("token"));//查询被授权人People people2 = peopleMapper.selectById(people.getId());if (StringUtils.isNull(people2)) {return toAjax(0);}//自己不能给自己授权if (userName.equals(people2.getUserName())) {return toAjax(0);}//设置基本信息people2.setUpdateBy(userName);people2.setUpdateTime(new Date());people2.setStartDate(people.getStartDate());people2.setEndDate(people.getEndDate());people2.setAuthorizer(userName);//修改数据return toAjax(peopleMapper.updateById(people2)); }
/*** 查询全部用户 不分页** @param people* @param request* @param response* @return*/ @GetMapping("/list") public AjaxResult list(People people, HttpServletRequest request, HttpServletResponse response) {if (verifyPermissions(request)) {return AjaxResult.error(HttpStatus.UNAUTHORIZED, "非法访问,请先登录");}//判断是否有权限if (!competence(request)) {return AjaxResult.error(HttpStatus.UNAUTHORIZED, "您没有权限访问,只有充钱才能让你变得更加强大,请充钱......");}List<People> list = peopleService.selectAll(people);return AjaxResult.success(list); }
/*** 判断是否有权限** @param request* @return*/ public boolean competence(HttpServletRequest request) {//获取当前登录对象的全部信息People people = peopleMapper.selectById(getUserId(request.getHeader("token")));//管理员拥有全部权限if (Constant.SUPER_ADMIN.equals(people.getUserName())) {return true;}//判断是否被授权//防止空指针if (people.getStartDate() != null && people.getEndDate() != null) {if (dateUtils.ifDate(people.getStartDate(), people.getEndDate(), new Date())) {return true;}}//从请求头中获取的地址String requestURI = request.getRequestURI();//通过角色id查询当前登陆对象的所有权限List<Power> list = powerMapper.selectUrl(people.getRoleid());ArrayList<String> stringList = new ArrayList<>();if (!StringUtils.isEmpty(list)) {list.forEach(r -> {stringList.add(r.getUrl());});return lsitUtils.ifcontainString(stringList, requestURI);}return false; }
/*** 判断一个时间是否在另外两个时间段之内** @param startDate 开始时间* @param endDaate 结束时间* @param currentDate 当前时间* @return*/ public boolean ifDate(Date startDate, Date endDaate, Date currentDate) {long time = startDate.getTime();long time1 = endDaate.getTime();long time2 = currentDate.getTime();if (time2 > time && time2 < time1) {return true;} else {return false;} }
测试结果:
“ww”账号登录查询全部数据
1.获取验证码
2.ww获取token
获取的token(eyJhbGciOiJIUzI1NiJ9eyJqdGkiOiJmMDI3OWI3NC1kZWRmLTQ4ODAtOTQxYS1jOGVjZjJjMzVkZWYiLCJpYXQiOjE2NTE3Mzg0OTAsInN1YiI6InRoayIsImlzcyI6InN0YWZmIiwiZXhwIjoxNjUxNzQwMjkwfQ_NQwGJYFVGx9VCvGKNGJbWFyudJCxVMQsOs5PbE8wZc)
3.查询全部数据,查询失败了
我们登录admin账号,给ww这个账号进行临时授权
1.获取验证码
2.admin账号获取token
获取的token(eyJhbGciOiJIUzI1NiJ9eyJqdGkiOiI1ZDIxYTUzNi1hN2Q3LTRlODYtYjgxZS1kNDNkZjU3YzBmMzIiLCJpYXQiOjE2NTE3Mzg3ODksInN1YiI6InRoayIsImlzcyI6InN0YWZmIiwiZXhwIjoxNjUxNzQwNTg5fQCC4WgNZWBbnxn0lWinKpEPRaPxksMR8wPCvRZsuA9W8)
3.admin查询全部数据
4.用admin账号给ww账号授予临时权限,让ww也可以查询全部数据
数据库:
授权前
授权后:
5.ww用户再次查询全部数据
授权成功,ww用户也可以查询到数据了,但是只有在开始时间(2022-05-05 14:00:00),结束时间(2022-05-06 14:00:00)之中可以访问,其他时间都不可以访问,简单临时授权就这样了,难的就不写了,麻烦,比如限制到具体的某一个接口,这上面的这种授权是通过时间段来进行授权的,只要在这个时间段,什么接口都可以访问,这个时间段结束之后,那么就只能访问它自己拥有的权限了,如果有其他的想法大家可以互相交流交流,谢谢
Springboot 临时授权相关推荐
- 40079 钉钉_钉钉获取免登陆授权码CODE,返回:不存在的临时授权码40078
[官方正版]给孩子看的编程少儿读物 55.2元 (需用券) 去购买 > 最近在踩基于钉钉开放平台进行开发的坑,然后在进行身份认证时遇到了"钉钉获取免登陆授权码CODE,返回:不存在的临 ...
- 获取阿里云临时授权访问STStoken
欢迎访问我的博客shammgodyoung 阿里云官方文档 相关SDK RAM 和 STS 介绍 阿里云权限管理机制包括访问控制(Resource Access Management,简称 RAM)和 ...
- 完整记录一下Web前端直传阿里OSS大文件+采用后端临时授权传stsToken的方式
文章目录 前言(可不看) 1. 简介 2. 必要了解项 2.1 资源术语 2.2 常用SDK 3. 准备工作 3.1 创建bucket 3.2 设置跨域规则 3.3 创建RAM子账户及配置权限 3.4 ...
- EasyDSS临时授权报错“上传文件无效”是什么原因?
EasyDSS视频直播点播流媒体解决方案在互联网视频直播风口上得到了广泛的应用,平台兼容多操作系统,支持Flash.H5播放,具有电视直播.现场直播.时移电视.即刻回看和视频点播功能.尤其是在无人机推 ...
- uniappH5+springboot微信授权登录获取用户数据(非静默授权)
uniappH5+springboot微信授权登录获取用户数据(非静默授权) 微信网页授权开发文档 准备工作 微信公众号appid和appSecret及配置相关的ip白名单 配置网页授权域名,具体操作 ...
- springboot微信授权登录
水平有限!实现方法直接找的网上的以为大神所编写的api来实现,这里主要是记录一下自己实现的过程.具体方法请参考网址:https://github.com/liyiorg/weixin-popular, ...
- 漏洞复现 - - - Springboot未授权访问
目录 一, 未授权访问是什么? 二,Actuator介绍 三,怎么进行漏洞发现呢? 四,实验环境 五,漏洞复现 1.通过访问env获取全部环境属性 2.通过/trace提供基本的http请求跟踪信息 ...
- springboot+uniapp授权登录+jsapi支付
SpringBoot+uniapp+jsapi微信支付,找了了好久资料,自己记录一下 1. 申请小程序并认证 1) 获取AppID和AppSecret 2) 配置服务器域名 3) 关联商户号 2.申请 ...
- SpringBoot临时文件目录/data/apps/temp
转自http://www.funyan.cn/p/298.html 运行中的项目突然报错, org.springframework.web.multipart.MultipartException: ...
最新文章
- Taglib原理和实现:再论El和JST
- PPIO 商业化架构解析
- 找二叉树中给定元素的的左孩子结点_LeetCode高频题:二叉树(五)
- Bad Request: amp;quot;requirement failed: Local path /root/.livy-sessions/
- javascript的事件绑定与事件委托
- mycat 从入门到放弃 (转)
- django框架之模板系统
- c# 程序员学习android(1)引导界面--viewpager的使用
- BZOJ1086 [SCOI2005]王室联邦(树分块)
- 写在午夜之时 ——《doom启示录》读后感(一)
- 微信小程序开发工具_云函数本地调试的依赖下载安装情况查看/云函数本地调试基础/调试手段和技巧
- 谷歌浏览器安装与扩展程序
- ArcGIS农村土地承包经营权辅助建库软件说明书
- 【寒江雪】UV+Depth信息计算世界坐标
- 【C++学习笔记】函数返回和函数重载
- 什么样的恐怖才是真恐怖?由最近所看的一部电影以及最喜欢的游戏系列想到的。
- session 是什么
- PCL点云去背景(相减)的方法
- 什么是Cookie和Session?—— Cookie和Session的区别?—— 一文教你理解清楚什么是Cookie和Session,以及常见的开发面试问题?
- windows系统修复 | 使用 System File Checker (SFC) scannow 命令修复问题