用户授权

前面讨论过,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. 替代Flume——Kafka Connect简介

    我们知道过去对于Kafka的定义是分布式,分区化的,带备份机制的日志提交服务.也就是一个分布式的消息队列,这也是他最常见的用法.但是Kafka不止于此,打开最新的官网. 我们看到Kafka最新的定义是 ...

  2. Codeforces 985E

    题意略. 思路: 这个题目开始想的有点暴力,后来发现有搜索的性质,因此转而用动态规划.首先,我们要把这些数排个序. 定义状态:dp[i]为排序后i~n能否成功打包,1表示可以,0表示不能打包. 状态转 ...

  3. MSIL实用指南-逻辑运算

    逻辑运算有三种:与.或.非.实现它们可以用位运算指令And.Or.Not等三个指令.它们的使用方法和位运算一致. 完整的程序如下: using System; using System.Reflect ...

  4. 一、mysql数据库,忘记密码怎么处理及处理过程中遇见的问题

    1.输入cmd命令打开控制台: 2.进入mysql.exe所在的路径: 3.执行mysqld --skip-grant-tables(注意:在输入此命令之前先在任务管理器中结束mysqld.exe进程 ...

  5. java设计模式7.策略模式、模板方法模式、观察者模式

    策略模式 策略模式的用意,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 环境角色:持有一个抽象策略角色的引用. 抽象策略 ...

  6. codeforces E. Mahmoud and Ehab and the function(二分+思维)

    题目链接:http://codeforces.com/contest/862/problem/E 题解:水题显然利用前缀和考虑一下然后就是二分b的和与-ans_a最近的数(ans_a表示a的前缀和(奇 ...

  7. CF - 652F Ants on a Circle

    题目传送门 题解: 先观察蚂蚁相撞, 可以发现, 如果我们将相撞的2个蚂蚁互换位置的话,蚂蚁相当于没有碰撞体积,直接穿过去了.所以我们可以直接计算出最终哪些位置上会有蚂蚁. 接下来就需要知道蚂蚁们的最 ...

  8. lightoj 1046 - Rider(bfs)

    A rider is a fantasy chess piece that can jump like a knight several times in a single move. A rider ...

  9. buuctf 随便注 writeup

    1.0 打开页面 显然这个题的考点是注入,那我们来测一下 2.0 sql注入测试 1 2 输入 1' 后发现没有回显,改为 1' --+ 后,有回显,应该在这存在注入点 试一下 1' and 1=1 ...

  10. Nginx简介及配置文件详解

    http://blog.csdn.net/hzsunshine/article/details/63687054 一 Nginx简介    Nginx是一款开源代码的高性能HTTP服务器和反向代理服务 ...