授权

认证

身份认证,就是判断一个一个用户是否为合法用户的处理过程。Spring Security中支持所中不同方式的认证。

授权

授权,即访问控制,控制水能访问那些资源。提前设计好系统权限规则,给认证的用户分配某一个资源的权限,用户根据自己所具有的权限,去执行相应的操作。

用户在认证成功之后会将当前登陆用户信息保存到Authentication对象中,Authentication对象中有一个getAuthorities()方法,用来返回当前登陆用户具备的权限信息,当需要进行权限判断时,就会根据集合返回权限信息调用相应方法进行判断。

我们针对授权可以是“基于角色权限管理”和“基于资源权限管理”,从设计层面上来说,角色和权限是两个完全不同的东西

权限是一些具体的操作,角色则是某些权限的集合。

  • 基于角色权限设计:用户-角色-资源,返回的就是用户的角色

  • 基于资源权限设计就是:用户-权限-资源三者关系,返回就是用户的权限。

  • 基于角色和资源权限设计就是:用户-角色-权限-资源,返回统称为权限。

在Spring Security中,角色和权限处理方式基本上是一致的。唯一区别就是会自动给角色添加ROLE_前缀,而权限则不会自动添加。

权限管理策略

SpringSecurity中为我们提供了两种权限管理策略:

  • 基于过滤器的权限管理(FilterSecurityInterceptor):基于过滤器的权限管理主要是用来拦截HTTP请求,拦截下来之后,根据HTTP请求地址进行权限校验。

  • 基于AOP的权限管理(MethodSecurityInterceptor):基于AOP权限管理主要是用来处理方法级别的权限问题。放需要调用某一个方法时,通过AOP将操作拦截下来,然后判断用户是否具备相关权限。

方法

说明

hasAuthority(String authority)

当前用户是否具备指定权限

hasAnyAuthority(String... authorities)

当前用户是否具备指定权限中的任意一个

hasRole(String role)

当前用户是否具备指定角色

hasAnyRole(String... roles)

当前用户是否具备指定角色中的任意一个

permitAll()

放行所有请求

denyAll()

拒绝所有请求

isAnonymous()

当前用户是否是一个匿名用户

isAuthenticated

当前用户是否已经认证成功

isRememberMe()

当前用户是否通过Remember-Me自动登陆

getAuthorities

当前用户是否既不是匿名用户也不同通过Remember-Me自动登陆

hasPermission(Object target, Object permission)

当前用户是否具备指定目标的指定权限信息

hasPermission(Object targetId, String targetType, Object permission)

当前用户是否具备指定目标的制定权限信息

基于请求的授权

基于方法注解的鉴权

在Spring Security6版本中@EnableGlobalSecurity被弃用,取而代之的是@EnableMethedSecurity,默认情况下,会激活pre-post注解,并在内部使用AuthorizationManager。

  • PostAuthorize

  • PostFilter

  • PostAuthorize:

  • PreFilter

动态权限

最后更新于