Spring Security权限控制系列(六)

网站建设3年前发布
21 0 0

20230306100129917331016b68777de82428e045d4de1b014dd7475,环境:Springboot2.4.12 + Spring Security 5.4.9,上一篇:《​​Spring Security权限控制系列(五)​​》,有如下接口:,安全配置:,有了上面的配置,启动服务访问http://localhost:8080/business/100接口时会要求登录,只要登录成功,接口就可以访问。,这里我不希望通过如下方式进行的权限设置:,这种写法限定了所有的/business开头的请求都由于固定的权限,/business可能会有很多的子接口,每种子接口可能我们都需要定义不同的权限才可访问,这时候如果在通过上面的方式配置就太繁琐了。Spring Security还提供了基于访问注解的方式细化接口权限的控制定义,接下来使用基于注解的方式控制Controller接口权限。,属性说明:,jsr250Enabled:启用对JSR-250注释的支持。@RolesAllowed。,prePostEnabled:启用基于表达式的语法支持(jsr250Enabled和securedEnabled都是基于简单角色的约束)。@PreAuthorize。,securedEnabled:启用@Secured注解的支持。,示例:,本篇内容只演示基于@PreAuthorize注解的权限控制,其它两个都非常简单不做演示。,该注解用于指定方法访问控制表达式的注释,该表达式将被计算以确定是否允许方法调用。默认支持的如下表达式:,20230306100130e68924f50834ae70e28109821884d0d30afbff261,示例1:,访问该接口必须具备USERS角色。,示例2:,访问该接口只要具有其中任意一种角色即可。,示例3:,访问该接口必须拥有bus:news:see权限。,实例4:,该接口只要拥有如下任意一个权限即可。,注意:这里的hasRole和hasAuthority区别?,权限认证使用的 表达式根对象的基类是SecurityExpressionRoot。该基类中实现了相应方法的调用,通过上面的源码知道,不管是hasRole还是hasAuthority最终都是调用的hasAnyAuthorityName方法,而hasRole方法拼接ROLE_前缀。

© 版权声明

相关文章