SpringBootSecurity学习(06)网页版登录方法级别的权限
用户授权
前面讨论过,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)网页版登录方法级别的权限的更多相关文章
- SpringBootSecurity学习(11)网页版登录之URL动态权限
动态权限 前面讨论用户登录认证的时候,根据用户名查询用户会将用户拥有的角色一起查询出来,自动实现判断当前登录用户拥有哪些角色.可以说用户与角色之间的动态配置和判断security做的非常不错.不过在配 ...
- lin-cms-dotnetcore.是如何方法级别的权限控制的?
方法级别的权限控制(API级别) Lin的定位在于实现一整套 CMS的解决方案,它是一个设计方案,提供了不同的后端,不同的前端,而且也支持不同的数据库 目前官方团队维护 lin-cms-vue,lin ...
- SpringBootSecurity学习(01)网页版登录入门介绍
Web应用安全管理 Web应用的安全管理,主要包括两个方面的内容,一个是用户身份的认证,即用户登录的设计,二是用户授权,即一个用户在一个应用系统中能够执行哪些操作的权限管理.权限管理的设计一般使用角色 ...
- SpringBootSecurity学习(03)网页版登录添加自定义登录页面
自定义登录页面 前面无论是使用默认配置,还是自定义配置类,都是使用的springboot-security自带的登录页面,自带的登录页面在这个版本虽然设计的非常不错,但是在实际开发中,我们通常还是使用 ...
- SpringBootSecurity学习(04)网页版登录其它授权和登录处理
其它授权配置 security的配置类中,对所有路径进行了统一授权配置.但是有的内容我们也需要让未登录游客有权限访问,比如js,css等静态文件,还有一些宣传页面等等.这些路径可以单独配置: 我们来试 ...
- SpringBootSecurity学习(05)网页版登录内存中配置默认用户
默认用户 前面的例子中我们使用的都是配置文件中配置好的默认用户: 除了可以配置账号密码,还可以在配置文件中配置角色: 这个角色是后面实现权限过滤的重要内容,后面会重点讨论. 在内存中配置默认用户 这样 ...
- SpringBootSecurity学习(08)网页版登录整合MyBatis
创建数据库 前面介绍了springboot-security整合jdbc从数据库中查询用户的方式,适用性有限,下面介绍最常用的整合MyBatis,这种在开发和生产环境中是最常用,也是最实用的.首先需要 ...
- SpringBootSecurity学习(10)网页版登录之记住我功能
场景 很多登录都有记住我这个功能,在用户登陆一次以后,系统会记住用户一段时间,在这段时间,用户不用反复登陆就可以使用我们的系统.记住用户功能的基本原理如下图: 用户登录的时候,请求发送给过滤器User ...
- SpringBootSecurity学习(07)网页版登录整合JDBC
数据库中定义用户 前面我们定义用户是在配置文件和代码中定义死的默认用户,一般在开发中是不会这样做的,我们的用户都是来自我们的用户表,存储在数据库中.操作数据库的技术有很多,spring securit ...
随机推荐
- Docker学习总结(六)--Dockerfile
什么是 Dockerfile Dockerfile 是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像. 对于开发人员:可以为开发团队提供一个完全一致的开发环境; 对于测试人 ...
- 基于Taro与typescript开发的网易云音乐小程序(持续更新)
基于Taro与网易云音乐api开发,技术栈主要是:typescript+taro+taro-ui+redux,目前主要是着重小程序端的展示,主要也是借此项目强化下上述几个技术栈的使用,通过这个项目也可 ...
- HTML 参考手册(摘自菜鸟教程)
标签 描述 基础 <!DOCTYPE> 定义文档类型. <html> 定义一个 HTML 文档 <title> 为文档定义一个标题 <body> ...
- Synchronized机制下偏向锁、轻量级锁、重量级锁的适用场景
上次总结了Synchronized机制下的锁的种类和原理,这次总结一下几种锁的适用场景. 偏向锁 一个线程获取某个对象的偏向锁的成本是很低的,只需把对象头的偏向线程id改为自己就好,如果偏向线程id已 ...
- 那些让你觉得自己是个傻B的题目集锦(大神的降维打击合集)
一起过来排好队,进来挨打 1.Leetcode tag-LinkList 109.convert sorted list to binary search tree 2Leetcode tag-Arr ...
- 洛谷P1939【模板】矩阵加速(数列)+矩阵快速幂
思路: 这个 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x>3) 可以想成: [a(n) ] [1 0 1] [a(n-1) ] [a(n-1) ] = ...
- CodeForces - 940E - Cashback +贪心+DP
传送门:CodeForces - 940E - Cashback 题意:在一个长度为n的数组中,可以分出长度为 k 连续的多个数组b(每个数组 b 的 k 可不相同),然后,可以对每个数组 b 进行删 ...
- 牛客小白月赛6 B 范围 数学
链接:https://www.nowcoder.com/acm/contest/135/B来源:牛客网 题目描述 已知与均为实数,且满足: 给定A,B,求x的取值范围? 由于Apojacsleam的计 ...
- CF - 1110F Nearest Leaf
题目传送门 题解: 先用题目给定的dfs方式得到dfs序,记录下出入的dfs序. 很明显可以得知的是,以u为根的子树的dfs序在 in[u] - out[u] 的范围之内. 将每个询问先全部存到对应的 ...
- hdu 4513(Manacher)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4513 题解:就是在Manacher判断回文串的过程中添加一条条件 Ma[i + dp[i] - 2] ...