学透 Spring:从入门到项目实战
丁雪丰
美团研究员
1073 人已学习
立即订阅
登录后,你可以任选4讲全文学习
课程目录
已完结/共 45 讲
时长 07:11
时长 15:51
时长 00:10
时长 02:03
时长 00:39
学透 Spring:从入门到项目实战
15
15
1.0x
00:00/00:00
登录|注册

第 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 实现类
实现类说明
AffirmativeBased只需要有一票赞同即视为同意
UnanimousBased需要所有成员都投赞同票才能视为同意
ConsensusBased多数人投赞同票即视为同意
那具体的投票动作又该谁来做呢?AccessDecisionManager 的实现类中都会注入一系列的 AccessDecisionVotervote() 方法负责具体的投票,返回可以是赞同ACCESS_GRANTED,值是 1)、弃权ACCESS_ABSTAIN,值是 0)和反对ACCESS_DENIED,值是 -1)。Spring Security 中同样也内置了不少实现,例如,RoleVoter 就可以根据当前用户的角色来进行投票,拥有指定角色即投赞同票,否则投反对票。在 Spring Security 中,角色可以视为特殊的权限,以 ROLE_ 打头,当然也可以设置别的前缀,不过一般不去调整。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了在Web应用程序中使用Spring Security进行访问授权管理的方法。强调了访问授权的重要性,指出身份认证只是粗略的控制方式,而访问授权可以更细致地控制用户对系统功能的访问权限。文章详细介绍了Spring Security中的AccessDecisionManager实现类,以及不同的决策方式和投票动作。通过一个二进制奶茶店的例子展示了如何在Spring Security中配置基本的权限管理,包括为匿名用户赋予权限、配置用户的权限信息以及设置不同角色的权限。此外,还介绍了面向方法的访问授权,通过Spring Security提供的注解,在方法执行前后做简单的判断,例如是否拥有某种角色,从而决定能否执行方法。文章还介绍了常见的Web攻击防护,如跨站请求伪造攻击的防护方法。文章内容详实,通过具体的示例和代码,清晰地介绍了Spring Security在Web应用程序中的访问授权管理,对于想要深入了解该主题的读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《学透 Spring:从入门到项目实战》
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部