spring security中可以通过表达式控制方法权限:
Spring Security中定义了四个支持使用表达式的注解,分别是@PreAuthorize
、@PostAuthorize
、@PreFilter
和@PostFilter
。其中前两者可以用来在方法调用前或者调用后进行权限检查,后两者可以用来对集合类型的参数或者返回值进行过滤。要使它们的定义能够对我们的方法的调用产生影响我们需要设置global-method-security元素的pre-post-annotations=”enabled”,默认为disabled。
1 | <security:global-method-security pre-post-annotations="disabled"/> |
使用@PreAuthorize和@PostAuthorize进行访问控制
- 不对方法参数验证情况
1 | /** |
- 对方法参数进行验证情况
1 | public class UserServiceImpl implements UserService { |
@PostAuthorize使用方法
有时候可能你会想在方法调用完之后进行权限检查,这种情况比较少,但是如果你有的话,Spring Security也为我们提供了支持,通过
@PostAuthorize
可以达到这一效果。使用@PostAuthorize
时我们可以使用内置的表达式returnObject表示方法的返回值。
1 | /** |
使用@PreFilter和@PostFilter进行过滤
使用
@PreFilter
和@PostFilter
可以对集合类型的参数或返回值进行过滤。使用@PreFilter
和@PostFilter
时,Spring Security将移除使对应表达式的结果为false的元素。
1 | /** |