支持方法级别的权限控制。在这种机制中,我们可以在任何层的任何方法上添加权限注释。添加注释的方法将自动保护。它仅允许特定的用户访问返回权限控制的目的。课程我们也可以自定义。
2.然后创建一个新的安全配置类
默认值已禁用。如果要打开注释,则需要在继承的类中添加其他解决方案,并将其定义为
我们看到有三个字段,一个字段支持每个字段代码,默认值是。然后让我们谈谈这三个一般注释。
prepatnabled = true的角色是启用@preauthorize和@postauthorize启用弹簧安全性的注释。
SecuredEnabled = true的作用是启用@Scured Spring Security的注释。
JSR250NABLED = TRUE的角色是启用@RolealLowed注释
有关集成的更多详细使用,请参阅我的Springboot+Springsecurity+JWT Solid Restfulapi权限的两个部分
弹簧安全核心接口用户权威的获取,原理
观察到JSR-250标准注释的主要注释
无需说代表拒绝并通过了。
例子
只要标记的方法具有用户,任何权限就可以访问权限。
在功能和使用方法方面
主要注释
@Secure
例如:
这意味着只有字符的用户才能访问方法。
这意味着用户具有两个字符中的任何一个字符,并且可以访问。
另一点是@secured,不支持Spring EL表达式
开口后,支持Spring EL表达式非常强大。如果没有访问方法的权限,则将抛出AccessDeniedException。
主要注释
3. - 执行后执行,在这里您可以调用方法的返回值,然后过滤或处理或修改返回值并返回
@preauthorize注意使用@preauthorize(“ hasrole('roun_viewer')”)等效于@secured(“ prole_viewer”)。
它也可以用同一件事代替:。
此外,我们还可以在该方法的参数上使用表达式:
在执行方法之前执行。在这里,您可以调用该方法的参数或获取参数值。这是Java8参数参数的使用来反映特征。如果没有JAVA8,您也可以使用Spring Security @P的@P标记参数,或使用Spring Data @@在参数参数。
在这里,在该方法执行之前,判断方法参数用户ID的值等于保存在主体中的当前用户的用户ID,或者当前用户是否具有cool_admin权限。两者可以访问此方法。
@postauthorize评论可以在执行该方法以获取该方法的返回值之后执行,并且您可以根据此方法确定最终授权结果(允许访问或访问):
在上面的代码中,仅当当前登录的用户名时,该方法的返回值中的用户名才允许访问。
请注意,如果EL是False,则该方法已被执行并可以回滚。EL变量returnObject指示返回对象。
@prefilter和@postfilter注意使用Spring Security提供注释来过滤传递参数:
当用户名中的子项与当前登录用户的当前用户名不同时,将保留;当用户名中的子项与当前登录用户的当前用户名相同时,请删除它。例如,当前用户的用户名是Zhangsan。目前,用户名的值是@prefilter实际介绍的用户名的值
如果执行方法包含集合的多种类型的参数,则尚不清楚filterObject以过滤哪个集合参数是。这次,您需要添加filterTarget属性以指定特定参数名称:
同样,我们还可以使用带注释的集合进行过滤:
目前,FilterObject表示返回值。如果根据上述代码实现它,则将实现:删除与返回值中与当前登录用户相同的用户名的子项。
如果我们需要在多种方法中使用相同的安全注释,则可以通过创建元通道来改善项目的维护。
例如,创建以下元通量:
然后,您可以将注释直接添加到相应的方法:
在生产项目中,由于元注射与业务逻辑和安全框架分开,因此使用元注释是一个很好的选择。
如果类中的所有方法都是同一安全注释的所有应用程序,那么此时,应将安全注释提高到类:
实现了上述代码:访问GetSystemear和GetSystemdate方法需要cool_admin权限。
当安全注释无法满足我们的需求时,您也可以应用多个安全注释:
目前,Spring Security将在执行该方法之前执行@preaturite的安全策略,并在执行该方法后执行@postauthorize的安全策略。
在这里结合我们的经验,给出以下两个技巧:
作者:Kenx