• Spring Security——基于表达式的权限控制


    一、 Spring EL表达式:

      Spring Security允许我们在定义URL访问或方法访问所应有的权限时使用Spring EL表达式,在定义所需的访问权限时如果对应的表达式返回结果为true则表示拥有对应的权限,反之则无。Spring Security可用表达式对象的基类是SecurityExpressionRoot,其为我们提供了如下在使用Spring EL表达式对URL或方法进行权限控制时通用的内置表达式。

    表达式

    描述

    hasRole([role])

    当前用户是否拥有指定角色。

    hasAnyRole([role1,role2])

    多个角色是一个以逗号进行分隔的字符串。如果当前用户拥有指定角色中的任意一个则返回true。

    hasAuthority([auth])

    等同于hasRole

    hasAnyAuthority([auth1,auth2])

    等同于hasAnyRole

    Principle

    代表当前用户的principle对象

    authentication

    直接从SecurityContext获取的当前Authentication对象

    permitAll

    总是返回true,表示允许所有的

    denyAll

    总是返回false,表示拒绝所有的

    isAnonymous()

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

    isRememberMe()

    表示当前用户是否是通过Remember-Me自动登录的

    isAuthenticated()

    表示当前用户是否已经登录认证成功了。

    isFullyAuthenticated()

    如果当前用户既不是一个匿名用户,同时又不是通过Remember-Me自动登录的,则返回true。

    二、通过表达式控制方法权限:

    2.1、JSR-250注解

       要使用JSR-250注解,首先我们需要通过设置global-method-security元素的jsr250-annotation=”enabled”来启用基于JSR-250注解的支持,默认为disabled。

      @EnableGlobalMethodSecurity( jsr250Enabled = true)

       RolesAllowed表示访问对应方法时所应该具有的角色。其可以标注在类上,也可以标注在方法上,当标注在类上时表示其中所有方法的执行都需要对应的角色,当标注在方法上表示执行该方法时所需要的角色,当方法和类上都使用了@RolesAllowed进行标注,则方法上的@RolesAllowed将覆盖类上的@RolesAllowed,即方法上的@RolesAllowed将对当前方法起作用。@RolesAllowed的值是由角色名称组成的数组。

           PermitAll表示允许所有的角色进行访问,也就是说不进行权限控制。@PermitAll可以标注在方法上也可以标注在类上,当标注在方法上时则只对对应方法不进行权限控制,而标注在类上时表示对类里面所有的方法都不进行权限控制。(1)当@PermitAll标注在类上,而@RolesAllowed标注在方法上时则按照@RolesAllowed将覆盖@PermitAll,即需要@RolesAllowed对应的角色才能访问。(2)当@RolesAllowed标注在类上,而@PermitAll标注在方法上时则对应的方法也是不进行权限控制的。(3)当在方法上同时使用了@PermitAll和@RolesAllowed时先定义的将发生作用,而都定义在类上时则是反过来的,即后定义的将发生作用(这个没多大的实际意义,实际应用中不会有这样的定义)。

           DenyAll是和PermitAll相反的,表示无论什么角色都不能访问。@DenyAll只能定义在方法上。你可能会有疑问使用@DenyAll标注的方法无论拥有什么权限都不能访问,那还定义它干啥呢?使用@DenyAll定义的方法只是在我们的权限控制中不能访问,脱离了权限控制还是可以访问的。

    2.2、@Secured注解

      @Secured是由Spring Security定义的用来支持方法权限控制的注解。它的使用也是需要启用对应的支持才会生效的。通过设置global-method-security元素的secured-annotations=”enabled”可以启用Spring Security对使用@Secured注解标注的方法进行权限控制的支持,其值默认为disabled。

      @EnableGlobalMethodSecurity( securedEnabled= true)  

    2.3、 支持表达式的注解

      Spring Security中定义了四个支持使用表达式的注解,分别是@PreAuthorize、@PostAuthorize、@PreFilter和@PostFilter。其中前两者可以用来在方法调用前或者调用后进行权限检查,后两者可以用来对集合类型的参数或者返回值进行过滤。

      @EnableGlobalMethodSecurity(prePostEnabled = true)

    基于方法的权限控制  

  • 相关阅读:
    算法
    日常
    算法
    算法
    算法
    算法
    NaviCat连接mysql出现加密方式错误的解决方案:
    Sql sugar的使用
    报表体联查详情页面
    第一次用临时表的感受:
  • 原文地址:https://www.cnblogs.com/pascall/p/10307817.html
Copyright © 2020-2023  润新知