SpringInAction学习笔记——第14章 保护方法应用
来源:互联网 发布:app相册制作软件 编辑:程序博客网 时间:2024/05/17 22:53
14.1 使用注解保护方法
Spring Security自带的@Secured注解;
JSR-250的@RolesAllowed注解;
表达式驱动的注解,包括@PreAuthorize、@PostAuthorize、@PreFilter和
@PostFilter。
14.1.1 使用@Secured注解限制方法调用
要在配置类上使用@EnableGlobalMethodSecurity:
@Configuration@EnableGlobalMethodSecurity(securedEnabled=true)public class MethodSecurityConfig() extends GlobalMethodSecurityConfiguration{}
在需要添加保护的方法上使用@Secured注解:
@Secured注解会使用一个String数组作为参数,每个String值是一个权限,调用这 个方法至少需要具备其中的一个权限。
只允许具有ROLE_SPITTER权限的认证用户才能调用addSpittle ()方法
@Secured注解的不足之处在于它是Spring特定的注解
@Secured({"ROLE_SPITTER","ROLE_ADMIN"})public void addSpittle(Spittle spittle){}
14.1.2 使用@RolesAllowed注解
@RolesAllowed是JSR-250定义的Java标准注解
与securedEnabled并不冲突。这两种注解风格可以同时启用
@Configuration@EnableGlobalMethodSecurity(jsr250Enabled=true)public class MethodSecurityConfig() extends GlobalMethodSecurityConfiguration{}
在需要添加保护的方法上使用@RolesAllowed注解:
跟@Secured一样,该种注解方式无法使用表达式来灵活执行控制
@RolesAllowed({"ROLE_SPITTER","ROLE_ADMIN"})public void addSpittle(Spittle spittle){}
14.2 使用表达式实现方法级别的安全性
在配置类上启用注解
@Configuration@EnableGlobalMethodSecurity(prePostEnabled=true)public class MethodSecurityConfig() extends GlobalMethodSecurityConfiguration{}
14.2.1 表述方法访问规则
@PreAuthorize:在方法调用前验证权限,String类型参数是一个SpEL表达式
#spittle部分直接引用了方法中的同名参数
@PreAuthorize("(hasRole('ROLE_SPITTER') and #spittle.text.length() < 140) or hasRole('ROLE_PREMIUM')")public void addSpittle(Spittle spittle){}
@PostAuthorize:在方法调用之后验证权限
SpEL中提供了名为returnObject的变量
principal是一个Spring Security内置的特殊名称,它代表了当前认证用户的主要信息
@PostAuthorize("returnObject.spitter.username == principal.username")public Spittle getSpittleById(long id){}
14.2.2 过滤方法的输入和输出
@PostFilter:事后对方法的返回值进行过滤
@PreAuthorize("hasAnyRole({'ROLE_SPITTER','ROLE_ADMIN'})")@PostFilter("hasRole('ROLE_ADMIN') || filterObject.spitter.username == principal.username")public List<Spittle> getOffensiveSpittles(){}
@PreFilter:事先对方法的参数进行过滤
@PreAuthorize("hasAnyRole({'ROLE_SPITTER','ROLE_ADMIN'})")@PostFilter("hasRole('ROLE_ADMIN') || targetObject.spitter.username == principal.username")public void deleteSpittles(List<Spittle> spittles){}
PermissionEvaluator:定义许可计算器,实现该接口,然后将实现类注册到Spring Security中 373
注册需要重载GlobalMethodSecurityConfiguration的createExpressionHandler方法
- SpringInAction学习笔记——第14章 保护方法应用
- SpringInAction学习笔记——第15章 使用远程服务
- 第14章 保护方法应用
- SpringInAction 学习笔记:高级装配
- Spring学习笔记之保护方法应用
- SpringInAction学习笔记:运行时值注入
- SpringInAction第3版学习日记(1)-装配Bean
- SpringInAction 学习笔记:自动装配歧义性处理
- SpringInAction学习笔记:Spring bean的作用域
- 跟着《SpringInAction》学Spring——入门篇
- SpringInAction第3版学习日记(2)-最小化SpringXML配置
- <<Linux内核完全剖析 --基于0.12内核>>学习笔记 第4章 80x86保护模式及其编程 4.5 保护
- SpringInAction:在Spring中应用切面
- C++学习笔记——数据的共享与保护
- Spring笔记一 SpringInAction第二章(一):装配Bean(一)
- java虚拟机学习笔记——方法的调用与返回(第19章 )
- C语言程序设计现代方法——学习笔记(第10章)
- C++ FAQ学习笔记 24章 继承 — 私有继承和保护继承
- 自定义View实例——FlowLayout(流布局)的实现
- Unity移动障碍物设置
- 【已解决】Django传递数据到js提示Unexpected token
- 记,一次vivado_hls使用gcc编译错误的解决
- eclipse中代码push到github每次要输入github仓库地址
- SpringInAction学习笔记——第14章 保护方法应用
- UItextview与UItextfield的区别及uitextview用法
- Codeforces AIM TECH Round 4 (Div 2) 题解 (ABCD)
- 561. Array Partition I
- recycleview 搞效率刷新
- Hibernate知识点概述
- 欢迎使用CSDN-markdown编辑器
- Spring管理事务默认回滚的异常是什么?
- 2017年中OTT运营大数据蓝皮书