Spring Security允许我们在定义URL访问或方法访问所应有的权限时使用Spring EL表达式,在定义所需的访问权限时如果对应的表达式返回结果为true则表示拥有对应的权限,反之则无。Spring Security可用表达式对象的基类是SecurityExpressionRoot,其为我们提供了如下在使用Spring EL表达式对URL或方法进行权限控制时通用的内置表达式。

表达式

描述

hasRole([role])

当前用户是否拥有指定角色。

hasAnyRole([role1,role2])

多个角色是一个以逗号进行分隔的字符串。如果当前用户拥有指定角色中的任意一个则返回true。

hasAuthority([auth])

等同于hasRole

hasAnyAuthority([auth1,auth2])

等同于hasAnyRole

Principle

代表当前用户的principle对象

authentication

直接从SecurityContext获取的当前Authentication对象

permitAll

总是返回true,表示允许所有的

denyAll

总是返回false,表示拒绝所有的

isAnonymous()

当前用户是否是一个匿名用户

isRememberMe()

表示当前用户是否是通过Remember-Me自动登录的

isAuthenticated()

表示当前用户是否已经登录认证成功了。

isFullyAuthenticated()

如果当前用户既不是一个匿名用户,同时又不是通过Remember-Me自动登录的,则返回true。

支持表达式的注解

@PreAuthorize 在方法调用之前,基于表达式的计算结果来限制对方法的访问

示例:
@PreAuthorize("#userId == authentication.principal.userId or hasAuthority(‘ADMIN’)")
void changePassword(@P("userId") long userId ){ }
这里表示在changePassword方法执行之前,判断方法参数userId的值是否等于principal中保存的当前用户的
userId,或者当前用户是否具有ROLE_ADMIN权限,两种符合其一,就可以访问该方法。

@PostAuthorize 允许方法调用,但是如果表达式计算结果为false,将抛出一个安全性异常

示例:
@PostAuthorize
User getUser("returnObject.userId == authentication.principal.userId or
hasPermission(returnObject, 'ADMIN')");

@PostFilter 允许方法调用,但必须按照表达式来过滤方法的结果

@PreFilter 允许方法调用,但必须在进入方法之前过滤输入值

方法级权限控制-基于表达式操作相关推荐

  1. 方法级权限控制-@Secured注解使用

    @Secured注解 @Secured注解标注的方法进行权限控制的支持,其值默认为disabled. 示例: @Secured("IS_AUTHENTICATED_ANONYMOUSLY&q ...

  2. 方法级别权限控制-基本介绍与JSR250注解使用

    服务器端方法级权限控制 在服务器端我们可以通过Spring security提供的注解对方法来进行权限控制.Spring Security在方法的权限控制上支持三种类型的注解,JSR-250注解.@S ...

  3. sharepoint2013列表实现项目级权限控制

    sharepoint2013列表实现项目级权限控制 分类: sharepoint 20132014-07-07 22:30 108人阅读 评论(0) 收藏 举报 sharepoint工作流sharep ...

  4. vue动态路由添加,vue-router的addRoute方法实现权限控制,添加根路由和子路由

    addRoute 路由分为静态路由和动态路由 静态路由和动态路由的优缺点 动态路由实现思路: 动态路由遇到的问题与解决方式 动态添加子路由 路由分为静态路由和动态路由 静态路由和动态路由的优缺点 1. ...

  5. hive表级权限控制_数据库权限管理:表、行、列级别的权限控制

    权限规则 1. 在配有主从集群时建议在主节点上做权限相关操作 2. 只有管理员和超级管理员才有将数据导入至表中的权限 3. 管理员用户赋予的是以整表为单位的权限,所有能赋予的权限为create/sel ...

  6. springboot 按钮权限验证_SpringBoot中实现Shiro控制ThymeLeaf界面按钮级权限控制

    需求简述 在业绩核算系统中,我们使用了SpringBoot作为项目的整体架构,使用ThymeLeaf作为前端界面框架,使用Shiro作为我们的权限控制框架,Shiro作为轻量级的权限框架,使用起来非常 ...

  7. Jenkin权限控制——基于角色授权策略

    开启授权策略 Jenkins的项目权限控制通过[授权策略]实现,[授权策略]需要plugins提供,首先需要安装Role-based Authorization Strategy 安装Role-bas ...

  8. vue-router的addRoute方法实现权限控制

    在项目实践中,往往需要用户登录后由后端返回用户的权限,来动态配置路由,vue-router提供了两个方法router.addRoutes(),router.addRoute()可以进行动态路由配置,这 ...

  9. hive表级权限控制_Hive权限控制和超级管理员的实现

    Hive权限控制 Hive权限机制: Hive从0.10可以通过元数据控制权限.但是Hive的权限控制并不是完全安全的.基本的授权方案的目的是防止用户不小心做了不合适的事情. 先决条件: 为了使用Hi ...

最新文章

  1. 面试官问为什么新生代不用标记清除算法
  2. 李铁:《非诚勿扰》与虚弱的中国人——写的太好了
  3. 深度学习——行数据的分拆及如何“喂”给训练过程
  4. 论一切都是文件之匿名 inode
  5. ffmpeg-0.8 移植到 windows 开源代码
  6. 戴尔optiplex3020主板接线_戴尔XPS 13 2020上手,12999元的高端精致怪,让苹果也很有压力!...
  7. 浅谈MyBatis源码工具类之——Reflector类
  8. smobiler仿饿了么app筛选页面
  9. c语言编程实现电脑关机,C语言让电脑关机?system函数功能够大够硬
  10. 下载速度MB/s与Mb/s的区别
  11. 项目管理、Bug管理软件工具:禅道,BugFree,Redmine
  12. 华三防火墙添加web用户_H3C防火墙系列三:WEB管理
  13. C | 使用C语言读取.mat文件
  14. android熄屏微信收到原理,求助,如何才能在息屏状态下显示收到的微信消息内容?...
  15. PortSwigger Academy | Authentication : 身份认证
  16. 用C语言实现求最大公因数和最小公倍数
  17. vue 中使用 marked + highlight.js 代码高亮
  18. 同时安装wampserver和xampp
  19. 杨辉三角c语言杭电,杭电 杨辉三角
  20. VIEW PUSHED PREDICATE(谓词推入)引发的惨剧

热门文章

  1. 创建安卓app的30个经验教训
  2. 避免css中文字体在浏览器中解析成乱码
  3. POJ2255Tree Recovery
  4. 读入一组文本行,打印最长的文本行
  5. 2招按摩轻松解除黑眼圈 - 健康程序员,至尚生活!
  6. java 语言循环总结
  7. 网上商城留言板的实现——用户添加留言
  8. 面试官都会问的Mybatis面试题,你会这样回答吗?
  9. jQuery四大选择器以及过滤选择器:的详解
  10. MySQL中SELECT语句简单使用