@PreAuthorize注解详解

2023-11-09

@PreAuthorize注解会在方法执行前进行权限验证,支持Spring EL表达式,它是基于方法注解的权限解决方案。只有当@EnableGlobalMethodSecurity(prePostEnabled=true)的时候,@PreAuthorize才可以使用,@EnableGlobalMethodSecurity注解在SPRING安全中心进行设置,如下:
 

/**
 * SPRING安全中心
 * @author ROCKY
 */
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

如何使用

①. 注解如何使用?

@Operation(summary = "通过id查询档案报表", description = "通过id查询档案报表")
    @GetMapping("/{reportId}" )
    @PreAuthorize("@pms.hasPermission('archsys_sysarchreport_view')" )
    public R getById(@PathVariable("reportId" ) Long reportId) {
        return R.ok(sysArchReportService.getById(reportId));
    }
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

②. 自定义权限实现 

@PreAuthorize("@pms.hasPermission('archsys_sysarchreport_view')" )

  1. pms是一个注册在 Spring容器中的Bean,对应的类是cn.hadoopx.framework.web.service.PermissionService;
  2. hasPermission是PermissionService类中定义的方法;
  3. 当Spring EL 表达式返回TRUE,则权限校验通过;
  4. PermissionService.java的定义如下:
public class PermissionService {

	/**
	 * 判断接口是否有任意xxx,xxx权限
	 * @param permissions 权限
	 * @return {boolean}
	 */
	public boolean hasPermission(String... permissions) {
		if (ArrayUtil.isEmpty(permissions)) {
			return false;
		}
		Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
		if (authentication == null) {
			return false;
		}
		Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
		return authorities.stream().map(GrantedAuthority::getAuthority).filter(StringUtils::hasText)
				.anyMatch(x -> PatternMatchUtils.simpleMatch(permissions, x));
	}

}
@RequiredArgsConstructor
@EnableConfigurationProperties(PermitAllUrlProperties.class)
public class PigResourceServerAutoConfiguration {

	/**
	 * 鉴权具体的实现逻辑
	 * @return (#pms.xxx)
	 */
	@Bean("pms")
	public PermissionService permissionService() {
		return new PermissionService();
	}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@PreAuthorize注解详解 的相关文章

随机推荐

  • Lightgbm多余信息显示

    LightGBM Warning No further splits with positive gain best gain inf 设置参数 verbosity 1 或 verbose 1
  • Python安装教程(2023年,3月)

    一 Python下载 1 进入Python官网 官网地址 https www python org 2 点击 Downloads 展开后点击 Windows 跳转到下载python版本页面 选择 Stable Releases 稳定版本 我
  • [gfirefly深入解析]--总体架构及demo讲解

    gfirefly是开源的分布式游戏服务器端框架 是firefly的gevent版本 想了解更多关于firefly可参考http www oschina net question 947559 147468 这是firefly的官网http
  • 【读书笔记】《Web全栈工程师的自我修养》

    读书笔记 Web全栈工程师的自我修养 推荐书单 1 什么是全栈工程师 黑客与画家 专业主义 2 如何成为全栈工程师 重来 更为简单有效的商业思维 精益创业 3 从学生到工程师 编程之美 微软技术面试心得 4 野生程序员的故事 打造Faceb
  • TOP命令及参数解析

    Top命令是linux 下常用的系统性能分析工具 能够实时显示系统中各个进程的资源占用状况 类似于windows的任务管理器 下面详细介绍它的使用方法 top 可以显示当前系统正在执行的进程的相关信息 包括进程ID 内存占用率 CPU占用率
  • 机器学习-分类-线性分类器

    在一个机器学习任务中 如果每一条数据的目标值是离散的 则该任务是一个分类任务 解决分类问题基本的方法有 线性分类器 决策树 朴素贝叶斯 人工神经网络 K近邻 KNN 支持向量机 SVM 组合基本分类器的集成学习算法 随机森林 Adaboos
  • java中float和double型数据在赋值时有哪些注意事项?,java语言中float和double类型的数据在编程时的注意事项...

    float和double类型的数据在编程时的需要注意的地方 package execisetest public class AccuranceTest public static void main String args float a
  • Rsync命令使用

    Rsync优点 持增量备份 第 次全量备份 第 次增量备份 边复制 边 较 边统计 传输效率很 数据集中备份 客户端可以推送数据 服务端 也可以从服务端获取数据 以客户端为参照物 保持 件属性 符号链接 硬链接 权限 时间等 安全 式传输
  • 微信企业号回调模式配置详细讲解

    对于微信企业号 我相信很多人都不陌生了 今天跟大家一起来探讨一下用java怎么去实现微信企业号回调模式配置 为什么需要开启回调模式 对于这点 我相信官方文档中说得比我更清楚 但是我还是想大家熟悉一下什么是回调模式 说白了就是当你有一个属于自
  • mysql in 查询时 入参为逗号隔开的字符如何查询,使用 find_in_set 代替 in

    SELECT FROM lao car model where find in set id 101 102 41840930066432 find in set 函数中 id 查询的字段名
  • 传统支付方式不能满足线下支付的需求

    刷脸支付趋势现在可以在便利店 餐饮店看见这样的场合 收银台不见了 换成了一块类似平板大小的显示屏 上边标注了刷脸支付 消费者在屏幕上点击开启刷脸支付 将脸部对准摄像头 摄像头采集到消费者面部信息后即可完成支付 消费金额就直接从消费者账户中扣
  • epoll实现原理

    用户态协议栈 为什么要实现epoll epoll并不是协议栈里面的 为什么要实现用户态协议栈 因为内核的epoll是对内核文件系统vfs fd进行的管理 是跟内核协议栈一起使用的 内核协议栈处理io后通过回调的方式来操作epoll中的就绪队
  • 两台计算机直连通信过程,教大家两台电脑网线直连传输的技巧

    我们总有需要把一台电脑的资料传输到另一台电脑的时候 其实我们可以让两台电脑共享局域网 通过网线直连来达到传输的目的 下面来看看小编是怎么操作的吧 1 设置电脑IP 首先打开下图界面 点击本地连接 2 接着我们点击属性选项 3 点击下图选中的
  • 零基础前端Vue的小白学习路——(Node.js,VSCODE,Hbuilder X)环境搭建

    俗话说 实践是检验真理的唯一标准 IT的学习更是离不开实践 要想成绩好 一个 做题笔记本 少不了 搭建环境想必是许多IT人刚入门一个新语言的第一个门槛 不正确的配置 不适配的版本往往会让你未来的道路变得不平坦 因此搭建环境时需要尤为谨慎 好
  • AVL代码 java

    任意一个节点 左右字数的高度差不能为超过1 先对x左旋转 转化为LL import java util ArrayList public class AVLTree
  • Java-静态绑定和动态绑定

    Java 静态绑定和动态绑定 绑定的概念 静态绑定 动态绑定 举例 绑定的概念 绑定指的是一个方法的调用与方法所在的类 方法主体 关联起来 对java来说 绑定分为静态绑定和动态绑定 或者叫做前期绑定和后期绑定 静态绑定 概念 在程序执行前
  • 字符编码与C++

    背景 C 的项目 字符编码是一个大坑 不同平台之间的编码往往不一样 如果不同编码格式用一套字符读取格式读取就会出现乱码 所以本文旨在对字符编码的知识做一个大概的梳理 字符编码定义 计算机是以二进制的形式来存储数据的 它只认识 0 和 1 两
  • angular2配置反向代理

    解决angualr2跨域问题 项目根目录下创建proxy conf json文件夹 api target http 106 75 29 87 8182 pathRewrite api environment gt environment t
  • 1093 - You can‘t specify target table ‘api‘ for update in FROM clause

    1093 You can t specify target table api for update in FROM clause 翻译 白话 例 修改 解决 翻译 您不能在 FROM 子句中指定目标表 Table 进行更新 白话 你不能先
  • @PreAuthorize注解详解

    PreAuthorize注解会在方法执行前进行权限验证 支持Spring EL表达式 它是基于方法注解的权限解决方案 只有当 EnableGlobalMethodSecurity prePostEnabled true 的时候 PreAut