第 10 章 保护 Web 安全(2)
丁雪丰
10.3 访问授权
通过上一节的学习,我们可以使用身份认证来判断谁能访问系统了,但一个系统通常会有很多功能,如果只是笼统地通过登录来控制,未免粒度太粗了。在登录进系统后,我们还希望能判断用户具体能访问哪个功能,这就是访问授权。每个用户可以有不同的权限,能访问什么,不能访问什么,都可以用 Spring Security 管理起来。
10.3.1 访问授权的判断方式
用户登录后,我们可以取得 Authentication 对象,其中有一系列 GrantedAuthority,它们就代表了当前用户拥有的权限,AccessDecisionManager 会读取这些权限进行判断:决策用户对于正在访问的目标是否拥有对应的权限。
Spring Security 内置的 AccessDecisionManager 实现采用了投票的方式,一共有三种不同的决策方式,具体如表 10-7 所示。对于 Web 工程而言,AbstractInterceptUrlConfigurer 中默认使用了 AffirmativeBased 这个实现。
表 10-7 Spring Security 内置的 AccessDecisionManager 实现类
那具体的投票动作又该谁来做呢?AccessDecisionManager 的实现类中都会注入一系列的 AccessDecisionVoter,vote() 方法负责具体的投票,返回可以是赞同(ACCESS_GRANTED,值是 1)、弃权(ACCESS_ABSTAIN,值是 0)和反对(ACCESS_DENIED,值是 -1)。Spring Security 中同样也内置了不少实现,例如,RoleVoter 就可以根据当前用户的角色来进行投票,拥有指定角色即投赞同票,否则投反对票。在 Spring Security 中,角色可以视为特殊的权限,以 ROLE_ 打头,当然也可以设置别的前缀,不过一般不去调整。
公开
同步至部落
取消
完成
0/2000
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
![](https://static001.geekbang.org/resource/image/d0/e4/d0880927e2a522a038be2d04bf19dfe4.png)
本文详细介绍了在Web应用程序中使用Spring Security进行访问授权管理的方法。强调了访问授权的重要性,指出身份认证只是粗略的控制方式,而访问授权可以更细致地控制用户对系统功能的访问权限。文章详细介绍了Spring Security中的AccessDecisionManager实现类,以及不同的决策方式和投票动作。通过一个二进制奶茶店的例子展示了如何在Spring Security中配置基本的权限管理,包括为匿名用户赋予权限、配置用户的权限信息以及设置不同角色的权限。此外,还介绍了面向方法的访问授权,通过Spring Security提供的注解,在方法执行前后做简单的判断,例如是否拥有某种角色,从而决定能否执行方法。文章还介绍了常见的Web攻击防护,如跨站请求伪造攻击的防护方法。文章内容详实,通过具体的示例和代码,清晰地介绍了Spring Security在Web应用程序中的访问授权管理,对于想要深入了解该主题的读者具有很高的参考价值。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《学透 Spring:从入门到项目实战》
《学透 Spring:从入门到项目实战》
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论