Spring-Security@PreAuthorize("hasAuthority('')")源码分析-程序员宅基地

技术标签: Java cookies  

Spring-Security@PreAuthorize(“hasAuthority(’’)”)源码分析
demo
@PreAuthorize(“hasAuthority(‘xxx’)”)用来鉴别当前登录用户所拥有的角色是否有xxx权限访问该接口。
点进去看看security是如何来鉴权的。

hasAuthority
这里authority即为我们传入的权限,比如prod:create,接下来再看this.hasAnyAuthority如何处理这个权限字符串吧。
hasAnyAuthority
翻看源码的话会发现其实hasAnyAuthority方法就在hasAuthority方法的下面,该访问hasAnyAuthorityName了,我们传入的权限字符串(prod:create)就像皮球一样被踢到了hasAnyAuthorityName脚下了~
hasAnyAuthorityName
该方法终于要射门了!
首行为 Set roleSet = this.getAuthoritySet(); 点进去getAuthorityeSet()方法看到
getAuthoritySet
该方法为获取当前用户所拥有角色的所有权限,Collection<? extends GrantedAuthority> userAuthorities = this.authentication.getAuthorities();此行为登录操作时应访问数据库将用户权限放入authentication中,也就是说,这一行将会把该用户所持角色的所有权限都查询出来。
此时我们的鉴权字符串(“prod:create”)被守门员getRoleWithDefaultPrefix()拿下,来看看守门员是怎么守住这球的:
getRoleWithDefaultPrefix
原来是判断一下这球是不是假动作啊,该方法会对传入的(prod:create)进行组装,前面传入的这个defaultRolePrefix为null,所以直接返回role即可,也就是我们一开始传入的“prod:create”。
该比对了,prod:create字符串在权限集合roleSet中,即该用户有访问该接口的权限。
总的来说,鉴权过程为:从数据库中查询出当前登录用户的所有权限并交给security管理;注解@PreAuthorize(“hasAuthority(‘xxx’)”)来判断“xxx”是否在当前登录用户的权限集合中,在则200,不在则403。
谢谢!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/guoke2017/article/details/94439661

智能推荐

基于51单片机的双通道DHT11温湿度显示器(LCD1602)_一条总线同时测量多个dht11-程序员宅基地

文章浏览阅读7k次,点赞24次,收藏109次。基于51单片机的双通道DHT11温湿度显示器(LCD1602)前言新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入前言这是单片机系统的课程大作业,做的有点仓促,代码其实也可以再优化一下,在这里抛砖引玉,希望能给大家带来一_一条总线同时测量多个dht11

微信开发的概念_omcwx-程序员宅基地

文章浏览阅读746次。微信开发的概念什么是微信开发微信这个软件,提供了聊天、支付、分享、收藏等各种功能,同时用户基数庞大;微信对外开放了很多接口和能力,程序员基于这些功能进行的二次开发,叫做微信开发微信开放平台微信开放平台是微信对外提供微信开放接口的一个平台,这些开放出来的微信接口,供第三方的网站或App使用;平台登录地址:https://open.weixin.qq.com微信开放平台的能力微信分享..._omcwx

Java Array、List、Set 互相转化_array 转set-程序员宅基地

文章浏览阅读582次。Java Array、List、Set 互相转化Array 转 ListString[] s = new String[]{"A", "B", "C", "D","E"};List<String> list = Arrays.asList(s);注意 list 的元素直接引用 s 的元素,换句话就是说:对 s 的修改,直接影响 list。s[0] ="F";System.out.println("list: " + list);List 转 ArrayString[] des_array 转set

maven 初次使用出现Could not transfer artifact 个人方法尝试经验_could not transfer artifact com.fasterxml.jackson:-程序员宅基地

文章浏览阅读1.8w次,点赞8次,收藏3次。1.配置阿里巴巴的私服镜像:在mirros元素中增加一个mirros元素。指向阿里云的下载地址。<mirrors><mirror><id>nexus-aliyun</id><mirrorOf>*</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/..._could not transfer artifact com.fasterxml.jackson:jackson-bom:pom:2.8.8

xxljob部署及基本使用_java tomcat xxl-job配置-程序员宅基地

文章浏览阅读2.7k次。文档上github官方说明文档https://github.com/xuxueli/xxl-job_java tomcat xxl-job配置

《操作系统原理》学习笔记:第3章 操作系统内存管理_《操作系统原理》这门课程系统讲解了现代操作系统的处理机管理,内存管理,文件管理-程序员宅基地

文章浏览阅读518次。前言:该系列文章为笔者学习清华大学《操作系统原理》相关课程笔记,参考书籍《操作系统概念》《现代操作系统等》。如果涉及相关书籍或课程版权,联系即删~《操作系统原理》学习笔记:第3章 操作系统内存管理3.1 计算机体系结构3.2 地址空间&地址生成3.3 连续内存分配3.3.1 内存碎片与分区的动态分配3.3.2 压缩式与交换式碎片整理3.1 计算机体系结构计算机基本硬件结构内存的层次结构操作系统在内存中需要完成的工作抽象(逻辑地址空间)不需要考虑底层细节,比如外设地址保护_《操作系统原理》这门课程系统讲解了现代操作系统的处理机管理,内存管理,文件管理

随便推点

php - 创建 cookie 与访问(会话控制)_php cookie会话隔离-程序员宅基地

文章浏览阅读3.3k次。前言由服务器发送到浏览器的变量,cookie 常用于识别用户,cookie 是服务器留在用户计算机中的小文件。每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie。通过 PHP 能够创建并取回 cookie 的值。setcookie()开始之前,先来看一下该函数,它向客户端发送一个 HTTP cookie。语法:setcookie(name, value, expire..._php cookie会话隔离

git忽略本地文件的修改;撤销本地merge;撤销本地commit_git忽略本地修改-程序员宅基地

文章浏览阅读2.4k次。git忽略已经提交的文件在本地的修改_git忽略本地修改

微信小程序 - 校验用户输入的手机号 / 身份证号 / 邮箱(正则表达式)_小程序手机号填写校验-程序员宅基地

文章浏览阅读4.4k次。前言这里提供了正则表达式的校验方法,具体业务逻辑请自行更改。手机号校验phone 为用户输入的手机号。if (!(/^1[34578]\d{9}$/.test(phone))) { console.log("手机号错误!")}else { console.log("手机号正确!")}身份证号校验id 为用户输入的身份证号。if (!(/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(id))) { console.log("身_小程序手机号填写校验

Vue.set 修改数组中的值_vue 设置数组的值-程序员宅基地

文章浏览阅读6.8k次。因JavaScript规则 我们无法在vue中通过这样this.outdata[0]='ddd'去改变数组中下标的值,页面不会触发更新所以此时要改变就需要用到Vue.set上demo<template> <div class="hello"> <h1>vue.set</h1> ..._vue 设置数组的值

Tomcat的介绍和环境搭建_tomcat在什么环境下部署的-程序员宅基地

文章浏览阅读1.4k次。Tomact的介绍与环境的配置写在前面: JSP 离不开 tomact,在开始我的tomact搭建除了一些问题,所以导致,在创建WEB项目的时候,出现许多莫名奇妙的问题,现在完整将Tomact的介绍和环境的搭建完整的整理出来,以便之后的参看和像我一样的初学者查看学习。1、Tomact是什么?Tomcat 是由 Apache 软件基金会属下 Jakarta 项目开发的 Servlet 容器,是..._tomcat在什么环境下部署的

msyql解析JSON字符串或JSON数组_msqyl getjson-程序员宅基地

文章浏览阅读195次。需要分析JSON字符串数据可以使用JSON_EXTRACT 函数JSON 字符串json_extract(JSON,"$.key") 可以获取到valueJSON 数组JSON_EXTRACT(JSON_ARRAY,"$[0].key")可以获取到第一个JSON数组里的value$[*]_msqyl getjson

推荐文章

热门文章

相关标签