lee 1739 0 2017-06-21 21:03:43

首先是启用方法级别的权限控制

@EnableGlobalMethodSecurity 开启Spring Security 全局方法安全
@EnableGlobalMethodSecurity 可以配置多个参数
prePostEnabled :决定Spring Security的前注解是否可用 [@PreAuthorize,@PostAuthorize,..] 
secureEnabled : 决定是否Spring Security的保障注解 [@Secured] 是否可用
jsr250Enabled :决定 JSR-250 annotations 注解[@RolesAllowed..] 是否可用.

1.@Secured
功能:
支持单一角色或者多个角色之间的任何一个角色,不支持spring EL表达式

2.@PreAuthorize 
注解适合进入方法前的权限验证, @PreAuthorize可以将登录用户的roles/permissions参数传到方法中。 
例子:
 @PreAuthorize("hasRole('ADMIN')")   拥有ADMIN角色权限才能访问
 @PreAuthorize("hasRole('ADMIN') AND hasRole('DBA')")  拥有ADMIN角色和DBA角色权限才能访问
 @PreAuthorize("hasAnyRole('ADMIN','DBA')") 拥有ADMIN或者DBA角色均可访问


3.@PostAuthorize
注解使用并不多,在方法执行后再进行权限验证。


@PreAuthorize / @PostAuthorize 注解更适合方法级的安全,也支持Spring 表达式语言,提供了基于表达式的访问控制。