01SpringSecurity权限控制

本文详细介绍了在微服务架构下,如何使用SpringSecurity实现权限控制。通过实例演示了角色权限加载、权限角色控制的具体实现方法,包括@PreAuthorize注解的使用及测试过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.SpringSecurity权限控制

在这里插入图片描述

用户每次访问微服务的时候,先去oauth2.0服务登录,登录后再访问微服务网关,微服务网关将请求转发给其他微服务处理。
由于我们项目使用了微服务,任何用户都有可能使用任意微服务,此时我们需要控制相关权限,例如:普通用户角色不能使用用户的删除操作,只有管理员才可以使用,那么这个时候就需要使用到SpringSecurity的权限控制功能了。

1.1角色权限加载

在changgou-user-oauth服务中,com.changgou.oauth.config.UserDetailsServiceImpl该类实现了加载用户相关信息,如下代码:

在这里插入图片描述

上述代码给登录用户定义了三个角色,分别为 salesman , accountant , user ,这一块我们目前使用的是硬编码方式将角色写死了

1.2权限角色控制

@PreFilter@PostFilter 。其中前两者可以用来在方法调用前或者调用后进行权限检查,后两者可以用来对集合类型的参数或者返回值进行过滤。在需要控制权限的方法上,我们可以添加@PreAuthorize注解,用于方法执行前进行权限检查,校验用户当前角色是否能访问该方法。
(1)开启@PreAuthorize
在 changgou-user-service 的 ResourceServerConfig 类上添加 @EnableGlobalMethodSecurity 注解,用于开启@PreAuthorize的支持,代码如下:

在这里插入图片描述

(2)方法权限控制
在 changgoug-service-user 微服务的 com.changgou.user.controller.UserController 类的delete()方法上添加权限控制注解 @PreAuthorize ,代码如下:

在这里插入图片描述

(3)测试
我们使用Postman测试,先创建令牌,然后将令牌数存放到头文件中访问微服务网关来调用user微服务的search方法,效果如下:
地址: http://localhost:8001/api/user/search/1/10 提交方式:GET

在这里插入图片描述

发现上面无法访问,因为用户登录的时候,角色不包含admin角色,而search方法需要admin角色,所以被拦截了。
我们再测试其他方法,其他方法没有配置拦截,所以用户登录后就会放行。
访问 http://localhost:8001/api/user
在这里插入图片描述

1.3小结

如果希望一个方法能被多个角色访问,配置: @PreAuthorize("hasAnyAuthority('admin','user')")
如果希望一个类都能被多个角色访问,在类上配置: @PreAuthorize("hasAnyAuthority('admin','user')")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值