SpringSecurity(前后端分离版)[6]-在配置类中进行权限校验

我们前面都是使用@PreAuthorize注解,然后在在其中使用的是hasAuthority方法进行校验。SpringSecurity还为我们提供了其它方法例如:hasAnyAuthority,hasRole,hasAnyRole等。

这里我们先不急着去介绍这些方法,我们先去理解hasAuthority的原理,然后再去学习其他方法你就更容易理解,而不是死记硬背区别。并且我们也可以选择定义校验方法,实现我们自己的校验逻辑。

hasAuthority方法实际是执行到了SecurityExpressionRoot的hasAuthority,大家只要断点调试既可知道它内部的校验原理。

它内部其实是调用authentication的getAuthorities方法获取用户的权限列表。然后判断我们存入的方法参数数据在权限列表中。

hasAnyAuthority方法可以传入多个权限,只有用户有其中任意一个权限都可以访问对应资源。

    @PreAuthorize("hasAnyAuthority('admin','test','system:dept:list')")
    public String hello(){
        return "hello";
    }

hasRole要求有对应的角色才可以访问,但是它内部会把我们传入的参数拼接上 ROLE_ 后再去比较。所以这种情况下要用用户对应的权限也要有 ROLE_ 这个前缀才可以。

    @PreAuthorize("hasRole('system:dept:list')")
    public String hello(){
        return "hello";
    }

hasAnyRole 有任意的角色就可以访问。它内部也会把我们传入的参数拼接上 ROLE_ 后再去比较。所以这种情况下要用用户对应的权限也要有 ROLE_ 这个前缀才可以。

    @PreAuthorize("hasAnyRole('admin','system:dept:list')")
    public String hello(){
        return "hello";
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Security中,权限控制的配置可以通过使用注解和配置类来实现。 一种方式是通过在方法上使用注解来进行权限控制。例如,在控制器类中,可以使用`@PreAuthorize`注解来指定需要的权限。比如`@PreAuthorize("hasAuthority('course:online')")`表示只有具有`course:online`权限的用户才能访问该方法。这个注解可以用在类级别和方法级别,用于对整个类或者方法进行权限控制。 另一种方式是通过配置类来实现权限控制。可以使用`@EnableGlobalMethodSecurity(prePostEnabled = true)`注解来开启方法级别的授权。这样就可以在方法上使用`@PreAuthorize`注解来进行权限控制。 在Spring Security的认证流程中,可以使用`AuthenticationManager`来进行认证。`AuthenticationManager`会调用`AuthenticationProvider`来进行具体的认证操作。`AuthenticationProvider`会调用`UserDetailsService`来加载数据库中的用户信息。然后使用`PasswordEncoder`来比较传入的密码和数据库中的密码是否一致。如果校验成功,就将用户信息封装成`UsernamePasswordAuthenticationToken`对象,并设置给`SecurityContext`,最后存储到`SecurityContextRepository`中。 总结起来,Spring Security权限控制配置主要是通过使用注解和配置类来实现的。通过在方法上使用`@PreAuthorize`注解来进行权限控制,同时需要开启方法授权。另外,在认证过程中,通过`AuthenticationManager`、`AuthenticationProvider`和`UserDetailsService`来完成认证操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SpringSecurity权限控制-基础配置](https://blog.csdn.net/weixin_49319251/article/details/110250097)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值