用户授权

前面讨论过,Web应用的安全管理,主要包括两个方面的内容,一个是用户身份的认证,即用户登录的设计,二是用户授权,即一个用户在一个应用系统中能够执行哪些操作的权限管理。前面介绍了登录,下面简单介绍一下用户授权。用户拥有的权限是根据用户的角色来决定的,并且security中,用户的权限可以控制到方法级别。

方法级别的权限控制

每个url的访问都是定义在controller方法上面的,因此需要配置方法权限。开启方法级别的权限,需要引入@EnableGlobalMethodSecurity注解:

注解中有三个参数,securedEnabled = true 表示方法权限控制可以使用安全注解 @Secured, 该注解的值 必须在现有的角色名称前加上ROLE_前缀,如 @Secured("ROLE_ADMIN"),多个角色可以这样写 @Secured({"ROLE_ONE","ROLE_TWO"}),表示最少有其中一个角色才能访问。

prePostEnabled = true 表示方法权限前置注解 @PreAuthorize,@PostAuthorize启用,注解 @PreAuthorize 适合进入方法之前验证授权。 @PreAuthorize可以兼顾,角色/登录用户权限,参数传递给方法等等 ,@PreAuthorize("true") 表示允许所有访问,注解 @PostAuthorize 不经常使用,它在检查授权方法之后才被执行,所以它适合用在对返回的值作验证授权。Spring EL提供可在表达式语言来访问并从方法返回 returnObject 对象来反映实际的对象。@PreAuthorize单个角色可以这样写 @PreAuthorize("hasRole('TWO')"),多个角色可以这样写 @PreAuthorize("hasRole('ONE') AND hasRole('TWO')"),@PreAuthorize("hasRole('ONE') OR hasRole('TWO')")注意and和or的意义。AND表示拥有所有权限才能访问,OR表示拥有任意一种权限就能访问。

jsr250Enabled = true 表示 启动了JSR-250的注解支持,在方法上使用注解来控制访问权限,注解@DenyAll 拒绝所有访问,注解 @PermitAll 允许所有访问,注解 @RolesAllowed({"USER", "ADMIN"}) 该方法只要具有"USER", "ADMIN"任意一种权限就可以访问。这里可以省略前缀ROLE_,实际的权限可能是ROLE_ADMIN。

项目演示

我们在内存中新建三个用户,分别是 one/one,two/two,three/three,他们三个的角色分别是 ONE,TWO,THREE,

三个用户,分别拥有三个不同的角色,下面新建三个页面,分别赋予三个角色权限:

三个方法的权限注解分别使用了三种方式赋予角色。下面我们登录one,查看效果,one页面是可以访问的:

two页面禁止访问:

显示403,forbidden。three页面也是一样:

其它两个用户可以自行登录测试。

用户权限不足处理器

前面介绍登录成功处理器,用户权限不足的情况也可以统一进行处理,让权限不足的情况下,跳转到同一个页面。下面新建类
AuthLimitHandler,实现AccessDeniedHandler接口:

/limit页面可以自己创建,完成后,在配置类中配置权限不足处理器:

重启访问,就可以看到处理效果:

代码地址:https://gitee.com/blueses/spring-boot-security 06

SpringBootSecurity学习(06)网页版登录方法级别的权限的更多相关文章

  1. SpringBootSecurity学习(11)网页版登录之URL动态权限

    动态权限 前面讨论用户登录认证的时候,根据用户名查询用户会将用户拥有的角色一起查询出来,自动实现判断当前登录用户拥有哪些角色.可以说用户与角色之间的动态配置和判断security做的非常不错.不过在配 ...

  2. lin-cms-dotnetcore.是如何方法级别的权限控制的?

    方法级别的权限控制(API级别) Lin的定位在于实现一整套 CMS的解决方案,它是一个设计方案,提供了不同的后端,不同的前端,而且也支持不同的数据库 目前官方团队维护 lin-cms-vue,lin ...

  3. SpringBootSecurity学习(01)网页版登录入门介绍

    Web应用安全管理 Web应用的安全管理,主要包括两个方面的内容,一个是用户身份的认证,即用户登录的设计,二是用户授权,即一个用户在一个应用系统中能够执行哪些操作的权限管理.权限管理的设计一般使用角色 ...

  4. SpringBootSecurity学习(03)网页版登录添加自定义登录页面

    自定义登录页面 前面无论是使用默认配置,还是自定义配置类,都是使用的springboot-security自带的登录页面,自带的登录页面在这个版本虽然设计的非常不错,但是在实际开发中,我们通常还是使用 ...

  5. SpringBootSecurity学习(04)网页版登录其它授权和登录处理

    其它授权配置 security的配置类中,对所有路径进行了统一授权配置.但是有的内容我们也需要让未登录游客有权限访问,比如js,css等静态文件,还有一些宣传页面等等.这些路径可以单独配置: 我们来试 ...

  6. SpringBootSecurity学习(05)网页版登录内存中配置默认用户

    默认用户 前面的例子中我们使用的都是配置文件中配置好的默认用户: 除了可以配置账号密码,还可以在配置文件中配置角色: 这个角色是后面实现权限过滤的重要内容,后面会重点讨论. 在内存中配置默认用户 这样 ...

  7. SpringBootSecurity学习(08)网页版登录整合MyBatis

    创建数据库 前面介绍了springboot-security整合jdbc从数据库中查询用户的方式,适用性有限,下面介绍最常用的整合MyBatis,这种在开发和生产环境中是最常用,也是最实用的.首先需要 ...

  8. SpringBootSecurity学习(10)网页版登录之记住我功能

    场景 很多登录都有记住我这个功能,在用户登陆一次以后,系统会记住用户一段时间,在这段时间,用户不用反复登陆就可以使用我们的系统.记住用户功能的基本原理如下图: 用户登录的时候,请求发送给过滤器User ...

  9. SpringBootSecurity学习(07)网页版登录整合JDBC

    数据库中定义用户 前面我们定义用户是在配置文件和代码中定义死的默认用户,一般在开发中是不会这样做的,我们的用户都是来自我们的用户表,存储在数据库中.操作数据库的技术有很多,spring securit ...

随机推荐

  1. .NetCore从零开始使用Skywalking分布式追踪系统

    本文将从0开妈搭建两个webapi项目,使用Skywalking来追踪他们之间的调用关系及响应时间.开发环境为VisualStudio2019 1:安装Skywalking,可参考:https://w ...

  2. Mongodb操作1-linux安装数据库

    1.下载mongodb 百度云盘连接 :链接:https://pan.baidu.com/s/1b-hTS0XHQKpatecFoumLxw  提取码:z9ax 并送上可视化工具:链接:https:/ ...

  3. lightoj 1036 - A Refining Company(简单dp)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1036 题解:设dp[i][j]表示处理到(i,j)点时的最大值然后转移显然是 ...

  4. codeforces C. Sonya and Problem Wihtout a Legend(dp or 思维)

    题目链接:http://codeforces.com/contest/713/problem/C 题解:这题也算是挺经典的题目了,这里附上3种解法优化程度层层递进,还有这里a[i]-i<=a[i ...

  5. Codeforces Round #385 (Div. 2) C - Hongcow Builds A Nation

    题目链接:http://codeforces.com/contest/745/problem/C 题意:给出n个点m条边,还有k个不能连通的点,问最多能添加几条边. 要知道如果有n个点最多的边是n*( ...

  6. 【Offer】[56-2] 【数组中唯一只出现一次的数字】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 在一个数组中除一个数字只出现一次之外,其他数字都出现了三次.请找出那个只出现一次的数字 [牛客网刷题地址]无 思路分析 如果一个数字出现 ...

  7. Excel如何动态获取列名

    遇到一个动态列,N行数据的求和,但是求和时需要Excel列名(A,B,C...)当时觉得这太非常难了.后来仔细研究了下Excel列名,都是从A到Z,然后AA再到AZ,以此类推. 如此的话就好弄了.通过 ...

  8. CentOS 7.3 安装 libsodium 1.0.18

    出现configure: error: The Sodium crypto library libraries not found.错误或者notfound 1.下载并解压 wget https:// ...

  9. java学习笔记之基础篇

    java选择语句之switch   //switch可以用于等值判断 switch (e) //int ,或则可以自动转化成int 的类型,(byte char short)枚举jdk 7中可以防止字 ...

  10. (转)为什么HashMap中链表长度超过8会转换成红黑树

    原博地址:https://blog.csdn.net/xingfei_work/article/details/79637878 HashMap在jdk1.8之后引入了红黑树的概念,表示若桶中链表元素 ...